一、final
- 修饰类,该类永远没有子类,也就是不能被继承, 可以创建对象
- 修饰类中方法,该方法不能被重写
- 修饰变量:既可以修饰局部变量也可以修饰成员变量
- 被final 修饰的变量就是一个常量,只能赋值一次 final int MAX_NUM = 10;
二、static
- 特点:
- 可以被本类所有的对象共享
- 可以直接通过 类名.静态成员
- 优先于对象存在
- 随着类的加载而加载
- 一句话:静态方法只能访问静态成员(静态成员变量 静态成员方法),非静态的方法可以访问任何的成员
- 静态方法能够直接访问静态成员(变量和方法),不能访问非静态 原因:静态优先于对象而存在于内存
- 非静态方法能够直接访问静态成员,也能够直接访问非静态成员
- 静态方法中没有this关键字,因为我们可以通过类名.静态方法直接调用,不需要对象 原因 :如果静态方法中含有this,它将无法指向任何对象
- 静态成员可以通过对象调用也可以使用类名调用,建议使用类名调用!!!
非静态成员只能通过对象调用!!!
三、抽象类
抽象类的特点
- 含有抽象方法的类一定是抽象类
- 抽象类中既可以有抽象方法也可以有非抽象方法
- 如果子类继承了抽象类,要么重写抽象类中的抽象方法,要么子类就声明为抽象类
- 不能创建对象,(因为方法没有具体实现,创建对象没有作用) 是用来继承的
抽象类成员的特点:
- 成员变量 可以是常量 也可以是变量
- 构造方法 抽象类的构造方法,为了让子类的构造方法调用来初始化父类的成员
-
举例 :
abstract class Fu {
int a;
public Fu(int a) {
super();
this.a = a;
}
}
class Zi extends Fu {
public Zi(int a) {
super(a);
}
}
- 成员方法 可以是抽象方法 也可以是非抽象方法
四、接口(interface)
- 接口的出现是为了弥补Java没有多继承(java可以多层继承)
- 接口是一个比抽象类还抽象,接口中所有的方法一定是抽象方法jdk7
- abstract关键字不能和private, final 共存 原因 抽象需要重写,private和final不要重写
- 接口可以多继承,也可以多层继承 为什么呢?
- 接口中的方法都是抽象的,没有具体实现,
多继承不同接口中相同名字的抽象方法也没关系,但是普通类中的方法有具体实现,如果要是多继承,
不知道执行哪个类中的方法体,所以普通类不能多继承
- 成员特点
- 构造方法
- 接口中没有构造方法,因为我们的构造方法一般是用来初始化成员变量,但是
接口中成员变量都是常量,一经初始化,值就固定了,根本不需要初始化
- 成员方法
- public abstract void method();//所有的成员方法都有默认修饰符 public abstract
- 成员变量
- public static final int i=10;//所有的成员变量都有默认修饰符 public static final
- 接口的优点
- 接口的出现是为了弥补Java没有多继承,
- 接口出现降低了耦合性
移动硬盘,鼠标,外置键盘这些设备,当你像使用的时候直接通过USB接口来链接电脑,不 想使用直接拔掉
- 接口与抽象类
- 相同点
- 不同点
- 抽象类中定义的是继承体系的共性功能
接口是扩展扩展功能
- 构造方法
抽象类有构造方法,留给子类通过super()语句来初始化父类成员
接口没有构造方法,接口中的变量都是常量
- 成员变量
抽象类中既可以有常量也可以有变量
接口由于是一种标准,含有的变量都是常量
- 成员方法
抽象类中既可以有抽象方法也可以有非抽象方法
接口中的方法一定是抽象方法
五、关系
- 类与类:一个类只能继承一个类,不能继承多个类
- 类与接口:一个类可以继承一个类同时还能实现多个接口
- 接口与接口:一个接口能够继承多个接口(可以多继承 也可以多层继承)
六、权限修饰符
public 默认 protected private
在同一个类中 √ √ √ √
在同一包不同类中 √ √ √
在不同包的不同类中 √
(这些类没有父子关系) ---------------------------------------------------------------------------
在不同包的不同类中 √ √
(有父子关系)