继承
- 通过继承,子类自动继承父类的方法和域(成员变量)
- 子类的方法不能直接访问父类的私有域
- 如果子类方法要访问父类的私有域,必须通过公有的接口(如父类的公有方法)
子类构造器
由于子类的构造器不能直接访问父类的私有域,因此需要调用父类的构造器对这些私有域初始化
采用super关键字进行调用
- super语句必须是子类构造器的第一条语句
- 如果子类构造器没有显式地调用父类的构造器,将自动调用父类默认无参构造器
- 如果子类构造器既没有显式地调用父类的构造器,父类中没有无参的构造器,则编译出错
访问控制
修饰符 | 类内部 | 同一个包 | 子类 | 任何地方 |
---|---|---|---|---|
private | Yes | |||
default | Yes | Yes | ||
protected | Yes | Yes | Yes | |
public | Yes | Yes | Yes | Yes |
多态
一个对象变量可以指示多种实际类型的现象被称为多态。
在程序执行时(非编译期间)判断所引用对象的实际类型,能够自动地选择调用相应方法的现象称为动态绑定。
产生多态的3个条件:
1. 要有继承
2. 要有重写(方法)
3. 父类引用指向子类对象(对象转型)
动态绑定的重要特性: 无需对现存的代码进行修改,就可以对程序进行扩展。
由于多态和动态绑定特性的存在,应当尽量少用类型转换和instanceof运算符
final类和方法
不允许扩展的类被称为final类,final类没有子类
- final类不能被继承
- final方法不能被重写
- final类中所有的方法自动成为final方法
抽象类
- 用abstract关键字来修饰一个类或方法时,这个类叫抽象类或抽象方法
- 含有抽象方法的类必须被继承,抽象方法必须被重写
- 抽象类不能被实例化
- 抽象方法只需声明,不需实现
public abstract class Person {
public abstract String getDescription();
...
}