1、复用类:组合、继承、代理、结合使用组合和继承。
2、组合:将对象引用置于新类中,即旧类对象作为新类的成员。
3、继承:通过extends关键字实现,扩展类会获得基类中的所有域和方法(注:基类中的私有域或方法,扩展类中无法直接使用)。
4、super关键字:调用基类方法或构造器。
5、代理:Java并没有提供对它的直接支持,这是继承与组合之间的中庸之道。因为我们将一个成员对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露了该成员对象的所有方法(就像继承)。
class SpaceShipControls {
void up(int velocity) {
}
void down(int velocity) {
}
void left(int velocity) {
}
void right(int velocity) {
}
void forward(int velocity) {
}
void back(int velocity) {
}
void turboBoost() {
}
}
public class SpaceShipDelegation {
private String name;
// 成员在方法调用之前初始化
private SpaceShipControls controls = new SpaceShipControls();
public SpaceShipDelegation(String name) {
this.name = name;
}
public void back(int velocity) {
controls.back(velocity);
}
public void down(int velocity) {
controls.down(velocity);
}
public void forward(int velocity) {
controls.forward(velocity);
}
public void left(int velocity) {
controls.left(velocity);
}
public void right(int velocity) {
controls.right(velocity);
}
public void turboBoost() {
controls.turboBoost();
}
public void up(int velocity) {
controls.up(velocity);
}
public static void main(String[] args) {
SpaceShipDelegation protector = new SpaceShipDelegation("NSER Protector");
protector.forward(100);
}
}
6、在组合与继承之间选择:“is-a”(是一个)的关系用继承来表达,“has-a”(有一个)的关系用组合来表达。
7、protected关键字:不同包的父子类之间可以访问。
8、final关键字:可能用到final的三种情况:数据、方法、类。
9、final数据:对于基本类型,final使数值恒定不变;而对于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。然而,对象其自身却是可以被修改的,Java并未提供使任何对象恒定不变的途径。这一限制同样适用数组,它也是对象。
10、一个既是static又是final的域只占据一段不能改变的存储空间。
11、final方法,把方法锁定,以防继承类修改它的含义,在继承中不会被覆盖。
12、类中所有的private方法都隐式地指定为是final的。final方法无法被覆盖。覆盖只有在某方法的基类的接口的一部分时才会出现。即,必须能将一个对象向上转型为它的基本类型并调用相同的方法。如果某方法为private,它就不是基类的接口的一部分。
13、@Override注解可以验证是否是重写。
14、final类:final类禁止继承。