面向对象语言有三个基本特征:封装、继承和多态。
向上转型
有时候在调用一个方法传参时,可以把某个类的子类当作基类传进去,这种把某个对象的引用视为对其基类型的引用的做法称为向上转型。这种做法的好处是不需要知道确切的对象类型,使代码更加通用。
绑定
将一个方法调用和一个方法的主体关联起来的做法叫做绑定。绑定分为前期绑定和后期绑定,C只有前期绑定。为了解决多态中方法调用主体的问题,java使用后期绑定(也就是多态),顾名思义,在调用方法时才会和这个方法所属的对象绑定。在java中,除了static方法和final方法(private方法属于final方法),其他方法都是后期绑定。
构造器和多态
由于构造器是static方法(隐式声明),所以构造器不具有多态性。调用构造器需要按照一下顺序:
- 调用基类构造器
- 按声明顺序调用成员的初始化方法
- 调用导出类构造器的主体
协变返回类型
协变返回类型指在导出类的被覆盖方法可以返回基类方法的返回类型的某种构造方法。说起来有点绕,其实就是在子类要覆盖的方法中可以返回这个方法的返回来类型的导出类型。下面有个例子:
class Grain{}
class Wheat extends Grain{}
class Mill{
**Grain** process(){ return new Grain(); }
}
class WheatMill extends Mill{
**Wheat** process(){ return new Wheat(); }
}
使用继承的设计
纯继承不进行拓展,是一种“is-a”的关系,扩展之后变为一种“is-like-a”的关系。