Reusing Classes
通過創建新的類,不是從頭創建,可以用現有的類
用這個類但是不污染這個類的已存在的code達到這個目的的方法有兩種
1. 組合(composition):創建這個類通過創建已有的類的對象,這個類就相當於之前的類的組合
2. 繼承(inheritance):創建這個類繼承已有的類
父類(基類base class)的方法必須是public或者是private的不然子類如果不是同一個package的就不能訪問
3. 在創建子對象的時候,隱含創造了一個父類的對象在子類中,這時候會調用父類的constructor
4. 如果要調用有參數的父類的constructor,要在子類的constructor函數裏面最開頭寫上super(args);
5. 授權Delegation:就是在一個類中創建一個對象,然後寫方法,這個方法是調用那個對象的方法,有繼承有點像,這樣的好處是,你可以只調用其中部分的方法,而不是全部實現。
public class SpaceShipDelegation {
private String name;
private SpaceShipControls controls =new SpaceShipControls();
public SpaceShipDelegation(String name) {
this.name = name;
}
// Delegated methods:
public void back(int velocity) {
controls.back(velocity);
}
}
- try finally:無論try是怎麼離開的,finally一定會執行
try {
}
finally{
}
- 和C++一樣,先創建的東西最後銷燬
比如:先創建 shape 在創建 rect
先銷燬 rect 再銷燬 shape - 和C++不一樣,java在子類中重載(新加)了方法之後,父類的方法沒有隱藏,還是可以調用的,C++是會隱藏的。
- Overload是重載相當於新加一個函數,參數不一樣的,名字一樣的
- Override是覆蓋,相當於函數名字一樣,參數一樣,就是重寫父類的方法
- Composition VS inheritance :問問自己自己新寫的類要不要upcast to 基類。
- final關鍵詞相當於c中的const,可以先申明blank final就是先不賦值,然後在constructor中賦初值。
- 對於private方法,自動隱含添加final修飾詞
- 如果一個方法用了final那就不能重寫了(override)
- 一個類如果用了final就不能被繼承了
- 一個類如果有繼承的時候,初始化是這樣的順序
1) 所有static的變量進行初始化,從父類的開始到子類的結束
2) 父類正常變量被初始化按定義順序
3) 父類constructor被調用
4) 子類正常變量被初始化按定義順序
5) 子類constructor被調用