复用代码是Java众多引人注目的功能之一。
组合与继承是两种代码重用的机制。
本章概览:
- 组合、继承、代理(java中没有delegation)
- 组合继承一起用
- 什么时候用组合、什么时候用继承
- 介绍@Override
- 介绍向上转型
- 介绍protect
- final关键字
- 补充又一次说初始化及类的加载(加静分清成构造)
组合、继承和代理
组合
class Bed {
}
class House {
Bed bed = new Bed()
}
继承
class Shape {
}
class Circle extends Shape{
}
代理
class Car {
void forward(){
}
void backward(){
}
}
class CarDelegation(){
Car car = new Car();
public void forward(){
car.forward();
}
public void backward(){
car.backward();
}
}
什么时候用组合、什么时候用继承
语义上:
组合是 has-a的关系,继承是is-a的关系
方法上:
当一个类需要向上转型时,才使用继承。
开发现有类的一个特殊版本,就用继承。
使用现有类的功能,而非接口,就用组合。
@Override
当使用该注解时,就是覆盖(override)基类的方法,如果基类不存在对应的方法,编译器会保持,避免覆盖变成重载(overload)的情况。(实现接口时也可以用override)
final的方法不可以覆盖。
protected
包访问权限区分了,包内和包外。
protected给包外的派生类开放权限。
protected比包访问权限大。(protected的方法,在包内就已经能访问了)
向上转型
当派生类的引用转换成基类的引用时,称为向上转型。
类图上的方向是向上的箭头,所以称为向上转型。
(多态和RTTI中进一步阐述)
Final关键字
成员变量
加final,初始化之后不可以变。
成员方法
加final之后,不可以重载。
private方法,默认就是final的
类
加final之后,不可以继承