1、類、超類和子類
is-a 關係是繼承的一個明顯特徵
經理有普通僱員沒有的屬性,比如項目獎金,因此需要新建一個 Manager 類。但是,如果他是經理,那麼他一定是僱員。
下面是繼承 Employee 類來定義 Manager 類的格式,關鍵詞 extends 表示繼承:
public class Manager extends Employee {
public Manager(int _age) {
super(_age);
// 因爲 Employee 沒有僅僅使用默認的構造方法,所以這裏也要寫明,不然會編譯錯誤
}
}
在 Java 中,所有的繼承都是公有繼承,沒有 C++ 的私有繼承和保護繼承。
父類和子類是青出於藍更勝藍的關係,子類比父類擁有更多的功能,也封裝了更多的數據。
繼承是一般到特殊、抽象到具體的漸變。
子類是父類的子集,例如經理集合是僱員集合的子集,至於是不是真子集,現在還不懂。-_-
子類可以使用父類的方法,反之不行,如果子類與父類有相同的方法需求但是實現不同,可以使用覆蓋 override 來達到這個目的,比如經理和普通僱員的薪水計算方法不同。
至於子類能不能訪問父類的私有域,這個又要看一下訪問權限了:
作用域 | 當前類 | 同一個包 | 子類 | 其他包 |
---|---|---|---|---|
private | ✔️ | ❌ | ❌ | ❌ |
default ( friendly ) | ✔️ | ✔️ | ❌ | ❌ |
protect | ✔️ | ✔️ | ✔️ | ❌ |
public | ✔️ | ✔️ | ✔️ | ✔️ |
所以現在一目瞭然了,子類只能訪問修飾符爲 protect 和 public 的父類的域。如果子類的確需要訪問私有域,就要藉助有公有接口。
注意:子類只能修改或者增加父類的方法,但不能刪除父類中的任何域和方法。
2、this 和 super 的區別
根本區別: this 是對當前對象的引用,而 super 不是,super 只是一個指示編譯器調用超類方法的一個關鍵字。
使用區別:
關鍵字 | 作用1 | 作用2 |
---|---|---|
this | 引用隱式參數 | 調用該類的其他構造器 |
super | 調用超類的方法 | 調用超類的構造器 |
好吧,這一節內容太多了,可能要拆成三篇來記。