Java實現(xiàn)代碼的復用主要有三種方式,一,組合,在新類中產(chǎn)生現(xiàn)有類的對象,復用了現(xiàn)有代碼的功能;二,繼承,采用現(xiàn)有類的形式并在其中添加新代碼,編譯器可以協(xié)助完成;三,代理,java并沒有內(nèi)置其實現(xiàn);
組合
將對象引用置于新類中即可
class A {
...
}
class B {
// 對A的引用,實現(xiàn)對其復用
private A a = new A();
...
}
編譯器并不為每個引用都創(chuàng)建默認的對象,如果想初始化這些引用,可在在以下四個位置進行:
- 定義對象的地方。如以上代碼所示。
- 在類的構(gòu)造器中。
- 在就要使用這些地方之前。
- 使用實例初始化。
繼承
class A {
...
}
// 通過extends關(guān)鍵字實現(xiàn)繼承,自動活動基類中所有的域和方法
class B extends A {
...
}
如果沒有明確指定從哪一個類繼承,則隱式從標準根基類Object進行繼承。
當創(chuàng)建了一個導出類的對象時,該對象包含了一個基類的子對象,這個子對象與用基類直接創(chuàng)建的對象是一樣的。
代理
代理是繼承與組合之間的中庸之道。
public class SpaceShipControls {
void up(int velocity);
void down(int velocity);
}
// 通過繼承實現(xiàn)SpaceControls代碼的復用,問題在于SpaceShip并不是真正的SpaceShipControls類型;
public class SpaceShip extends SpaceShipControls {
public static void main(String args[]){
SpaceShip spaceShip = new SpaceShip();
spaceShip.up(100);
};
}
// 通過代理實現(xiàn)SpaceShipControls的復用
public class SpaceShip {
private SpaceShipControls spaceShipControls = new SpaceShipControls();
private void up(int velocity) {
spaceShipControls.up(velocity);
}
}
final關(guān)鍵字
- 類中所有的private方法都隱式地指定為final的,對private方法添加final修飾詞不會增加任何額外的意義。
- final類表明禁止該類被繼承,final類的所有方法都隱式是final的