java类的种类
1.this
this指向当前对象。
public class HelloWorld{
String name = "桔子桑";
public void call(){
System.out.println(this.name);
}
}
2.java中的几种类
我们知道如何去定义一个类,在此基础上,还有子类、内部类。
class BaseClass{//父类 }
class newClass extends BaseClass{//子类 }
这个子类newClass继承了父类的所有属性和方法,并且还额外拥有自身的属性和方法。
public class Wrap {
public class InnerClass{
public void say(){
System.out.println("内部类的方法");
}
}
//程序入口
public static void main(String[] args) {
// TODO Auto-generated method stub
Wrap hi = new Wrap();// 实例化外部类
InnerClass hello = hi.new InnerClass();//实例化内部类,注意写法
hello.say();
}
}
以上就是如何定义(成员)内部类以及调用。
3.内部类的种类
成员内部类:上一条所提到的内部类就是成员内部类,所谓成员内部类,
就是说这种类的级别同等于成员变量和方法,它们是属于同一级别的;
作为一个类,它是可以有自己内部的变量和方法的,成员内部类内部也是可以定义变量和方法的;
内部类访问外部类的变量,采用 外部类名.this.外部类成员变量名,例如:OuterClass.this.name;
外部类方法访问内部类变量或者方法,采用OuterClass outer = new OuterClass();
InnerClass inner =outer.new InnerClass();获取内部类对象,
然后inner.name;或者inner.say();访问变量和方法。
静态内部类:静态内部类就是一般的内部类加上static修饰符;
因为是静态的,所以只能直接访问静态变量和方法,这一点java学习笔记03第5条讲到过,
不记得的可以再回顾一下;
要访问非静态变量和方法,要先实例化一个变量所在类的实例,然后再通过 实例.静态变量名 访问。
方法内部类:就是内部类定义在外部类的方法中;
方法内部类只能在该方法内部使用,所以不能使用访问控制符(public等)和修饰符(static);
就像是局部变量,在方法外部是无法访问的。
4.类的继承
上面所说的子类实际上就是类的继承;
采用extends关键字,子类继承了父类的属性和方法;
如果子类对于父类的方法不满意,可以修改方法,但是定义方法的形式不可作任何更改,即方法重写。
创建子类对象时,初始化顺序为:父类属性初始化-->父类构造方法-->子类属性初始化-->子类构造方法。
5.super的使用
super指向该子类的父类对象,相当于为我们简化了实例化父类对象的步骤;
BaseClass base = new BaseClass();这个super就相当于这里的base;
base.name和super.name是等价的。
6.Object类
java中所有我们自己定义的类其实都有一个相同的父类,那就是Object类;
所以我们定义的类都具有Object类的方法和属性,例如:toString()方法、equals()方法,当然,
我们是可以在自定义类中对这些方法进行修改以达到自己想要的效果。
7.多态
多态是建立在继承的基础上的,现在有一个父类Father和一个子类Son;
它们都有一个同名方法say(),当然内容不一样,可以看做是子类对父类的方法重写;
另外Son还有一个自己独有的方法hi();
Father father = new Father(); //父类的引用指向父类对象(引用多态)
Father son = new Son(); //父类的引用指向子类的对象(引用多态)
father.say(); //这个语句是可行的(方法多态),访问的是父对象的方法
son.say(); //这个语句也是可行的(方法多态),访问的是子对象的方法
son.hi(); //这个语句是不可行的
总结:只有在某种方法(方法体可以不同)同时存在于引用类和对象类的前提下,
才能对其进行调用。
8.引用类型转换
引用类型转换分为向上转换、向下转换;依旧使用上面的例子
Son son1 = new Son(); //子类的引用指向子类的对象
Father son2 = son1; //父类的引用指向子类的对象,这里的son就相当于new Son();
这种父类的引用指向子类的对象就是向上类型转换;
可以这么理解,子类是继承于父类的,它可以人为地添加一些父类没有的属性或方法,
所以,子类的容积是大于父类的,那么现在将父类的引用(一碗水)放到/指向子类的对象(一桶水),
是不存在任何问题的,所以向上类型转换是不存在任何问题的。
Son son3 = son2; //子类的引用指向采用父类引用的对象,可以看到son2是采用了父类的引用
这种子类的引用指向采用父类引用的对象就是向下类型转换;
虽然这个对象是一个子类对象,但是它采用了父类的引用,编译器认为这种引用类型转换是存在风险的,
要解决这个问题,就要人为地将这个对象声明为子类引用(强制转换);
Son son3 = (Son)son2;
instanceof,返回值为布尔型,检验两者是否是同一个对象,即是否能够真正实现强制转换;
Father son4 = new Father();
son1是一个采用Son类引用的Son对象;
son2是一个采用Father类引用的Son对象;
son4是一个采用Father类引用的Father对象;
son2 instanceof Son;因为son2是个Son对象所以返回值为True,Son son3 = (Son)son2这种强制转换是有效的;
son4 instanceof Son;因为son4是个Father对象,所以该返回值为False,Son son3 = (Son)son4这种强制转换是无效的。
9.抽象类
定义一个抽象类采用abstract关键字;
public abstract class Father{
public abstract void call();
public abstract void say();
}
抽象类内的方法也采用abstract关键字,且没有方法体;
继承(extends)了抽象类的子类会自动创建抽象类内部的方法。
10.接口Interface
接口可以理解为一个特殊的抽象类,习惯在命名上以大写的 I 字母打头;
public abstract interface Itodo{
public abstract void call();
}
接口中的abstract关键字我们通常是不用写明的,虽然不写但系统会帮我们自动添加的;
那如何为一个类实现接口的功能呢,这里采用implements关键字;
public class Son extends Father implements Itodo{
@Override
public void call(){
// TODO Auto-generated method stubs
System.out.println("该类继承了Father类并实现接口Itodo");
}
}
Father类和接口Itodo之间并无任何联系。
java类的种类的更多相关文章
- Java 类反射机制分析
Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...
- 浅谈java类集框架和数据结构(1)
在另外一篇博客我简单介绍了java类集框架相关代码和理论. 这一篇博客我主要分析一下各个类集框架的原理以及源码分析. 一:先谈谈LinkedList 这是LinkedList源码的开头,我们能看到几点 ...
- JAVA 类总结
JAVA 类总结 最近看了遍java内部类相关的一些内容,做一些总结.与个人博客 zhiheng.me 同步发布,标题: JAVA 类总结. 顶级类与嵌套类 定义在某个类(或接口,下同)内部的类,称为 ...
- [Java初探08]__简单学习Java类和对象
前言 在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使 ...
- java类载入器——ClassLoader
Java的设计初衷是主要面向嵌入式领域,对于自己定义的一些类,考虑使用依需求载入原则.即在程序使用到时才载入类,节省内存消耗,这时就可以通过类载入器来动态载入. 假设你平时仅仅是做web开发,那应该非 ...
- 如何用Java类配置Spring MVC(不通过web.xml和XML方式)
DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置方式, XML看起来太累, 冗长繁琐. 还好借助于Servl ...
- jvm系列(一):java类的加载机制
java类的加载机制 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装 ...
- java类与实例
最近在看设计模式,感觉自己对java的三大特性的理解不够清晰,搞不清楚抽象类.接口.泛型的用处和优缺点.设计模式学了一半,想着还是停下来脑补一下java的基础,就从java对象开始吧. 一.java对 ...
- oracle调用JAVA类的方法
导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了, 1.操作系统需要拥有支持loadjava命令的jdk. 2.加 ...
随机推荐
- 深入Java关键字instanceof
深入Java关键字instanceof instanceof关键字用于判断一个引用类型变量所指向的对象是否是一个类(或接口.抽象类.父类)的实例. 举个例子: public interface ...
- Linux Debugging(三): C++函数调用的参数传递方法总结(通过gdb+反汇编)
上一篇文章<Linux Debugging:使用反汇编理解C++程序函数调用栈>没想到能得到那么多人的喜爱,因为那篇文章是以32位的C++普通函数(非类成员函数)为例子写的,因此只是一个特 ...
- 【Mac】Mac OS X 安装GNU命令行工具
macos的很多用户都是做it相关的人,类unix系统带来了很多方面,尤其是经常和linux打交道的人. 但是作为经常使用linux 命令行的人发现macos中的命令行工具很多都是bsd工具,跟lin ...
- 匿名函数,结合闭包的写法,js对象的案例
/* * name :Zuoquan Tu * mail :tuzq@XXX.com.cn * date :2015/04/1 * version :1.1 * description:modifie ...
- 好看的dialog,sweet Alert Dialog 导入Android Studio
系统自带的dialog实在是丑到无法忍受.所以找到了一款比较好的第三方dialog. github 地址如下:https://github.com/pedant/sweet-alert-dialog ...
- ITU-R BT.1788建议书 对多媒体应用中视频质量的主观评估方法
ITU-R BT.1788建议书 对多媒体应用中视频质量的主观评估方法 (ITU‑R 102/6号研究课题) (2007年) 范围 数字广播系统允许提供多媒体和数据广播应用,包括视频.音频.静态图像. ...
- Effective C++总结
条款01:视C++为一个语言联邦(View C++ as a federation of languages.) C++主要的四个次语言: (1)C.说到底C++仍是以C为基础:(2)Object-O ...
- Android开发常用网站汇总
1.eoe Android开发者论坛 目前国内最早的Android开发者社区,人气非常旺聚集了不少Android开发方面的高手,开发中遇到的问题大都能在这里获得解决,网站最大的特色是定期发布<e ...
- Systemc在VC++2010安装方法及如何在VC++2010运行Noxim模拟器
Systemc在VC++2010的安装方法可以参考文档"Systemc with Microsoft Visual Studio 2008.pdf".本文档可以在"htt ...
- SharePoint 门户网站的图片轮播-页面定制
这个想法是自己突然的一个想法,想想我们经常用SharePoint做门户网站,不知道你们多数项目都是怎么完成的,我们客户要求的效果都还是很严格的,所有展现起来,还是很漂亮的,但是很多时候的效果,还是难以 ...