抽象類
- 使用場景
- 當多個類之間有關係並且包含相同功能,但是功能主體不同,可以考慮向上抽取,只抽取功能含義,不抽取功能主體。由於功能主體不知道,故該方法是抽象的,修飾方法爲abstract,包含了抽象方法的類是抽象類,也需要在類上加abstract。
- 當不想讓外界創建對象時,也可修飾類爲abstract。
- 抽象類的特點
- 抽象類不可以創建對象。
- 若子類沒有覆蓋抽象類的所有抽象方法,那麼子類也是一個抽象類。
- 抽象類可以沒有抽象方法,但包含抽象方法的類一定是抽象類。
- 當多個類之間有關係並且包含相同功能,但是功能主體不同,可以考慮向上抽取,只抽取功能含義,不抽取功能主體。由於功能主體不知道,故該方法是抽象的,修飾方法爲abstract,包含了抽象方法的類是抽象類,也需要在類上加abstract。
接口
- 使用場景
當事物除了包含基本功能外,還有一些擴展功能,可將這些擴展功能抽象到接口中,是對外暴露的規則。
- 接口中成員的特點
1. 變量:默認是常量,被修飾爲public static final。
2. 方法:默認是抽象方法,被修飾爲public abstract。 - 接口在繼承中的特點
接口可以被子類多實現,因爲接口的方法是抽象的,沒有方法體,子類調用不會產生衝突。 - 接口與抽象類的區別
1. 接口是like a,抽象類是has a,即接口提供擴展功能,是對外暴露的規則,而抽象類提供子類的基本功能。
2. 當事物之間有內在聯繫時用抽象類,當只是有相同的操作時用接口。
3. 子類能實現多個接口,但是隻能繼承一個抽象類。
4. 接口的方法都是抽象的,抽象類可以沒有抽象方法。
覆蓋
使用場景
- 子類繼承抽象類或者實現接口。
- 當子類要重新賦予一個方法的含義時。
覆蓋注意事項
- 子類覆蓋父類,子類方法權限必須大於父類。
- 靜態只能覆蓋靜態。
多態
- 多態的體現:父類引用指向子類對象。
- 多態的好處:提高了代碼的擴展性。
- 多態的弊端:只能使用父類中的成員。
- 多態的前提:多個子類繼承或實現,並且覆蓋。
- 多態中成員在編譯時期和運行時期的特點
- 成員變量:編譯和運行時期都參考引用
- 成員方法:編譯時期參考引用,運行時期參考對象
- 靜態成員方法:編譯和運行時期都參考引用
- Object類中的equals()和toString()
- boolean equals():比較的是引用數據類型的對象地址值,不能比較基礎數據類型,一般進行重寫。
- String toString():利用hashCode()返回對象的地址,一般進行重寫。
- 成員變量:編譯和運行時期都參考引用
super
- super(屬性):調用父類構造函數
- super.屬性:訪問父類同名屬性
- super.方法名():訪問父類的成員函數
final
- 類:不可以被繼承,彌補了繼承導致破壞封裝性的問題
- 屬性:常量,只能賦值一次,一般與static共同修飾
- 方法:不可以被覆蓋