文章目錄
- 1.向上轉型
- 2.轉機
- 方法呼叫系結
- (2) 前期系結
- (3) 后期系結(動態系結/運行時系結)
- 產生正確行為
- 可拓展性
- 缺陷:“覆寫”私有方法
- 缺陷:域和靜態方法
- 3.構造器和多型
- 構造器的呼叫順序
- 繼承與清理
- 構造器內部的多型方法的行為
- 4.協變回傳型別
- 5.用繼承進行設計
- 用繼承表達行為之間的差異,并用欄位表狀態上的變化
- 純繼承與拓展
- 向下轉型與運行時型別識別
1.向上轉型
- 把對某個物件的參考視為對基型別的的參考(例如:Wind繼承于Instrument,在需要傳遞Instrument型別的時候,也可以傳遞Wind物件代替)
2.轉機
-
方法呼叫系結
(1) 將一個方法呼叫同一個方法體關聯起來
(2) 前期系結
在程式執行前進行系結(static、final)
(3) 后期系結(動態系結/運行時系結)
在程式運行時根據物件型別進行系結
-
產生正確行為
(1) 發訊息給某個物件,讓物件去判斷該做什么
(2) 在編譯時,編譯器不需要獲得任何特殊資訊就能進行正確呼叫
-
可拓展性
(1) 只與及類介面通信,這樣的程式是可拓展的,因為可以從通用的基類繼承出新的資料型別,從而新添一些新功能
(2) 多型:將新改變的事物和未被改變的事物分離開
-
缺陷:“覆寫”私有方法
(1) 只有非private的方法才可以被覆寫
(2) 如果匯出類有一個方法與基類private方法同名,則匯出類中的方法被視為一個“新的方法”,并不是覆寫基類同名private方法
-
缺陷:域和靜態方法
(1) 任何與訪問都將由編譯器決議,因此不是多型
(2) 靜態方法是與類關聯的,并非與單個物件相關聯,所以某個方法是靜態的,他的行為就不是多型性
3.構造器和多型
-
構造器的呼叫順序
(1) 呼叫基類構造器
(2) 按宣告順序呼叫成員初始化方法
(3) 呼叫匯出類構造器主體 -
繼承與清理
(1) 某個子物件要依賴于其他物件,銷毀順序應該和初始化順序相反
(2) 首先清理匯出類,再清理基類(因為匯出類中的某些構建依賴于基類,所以要讓基類中的構建在匯出類銷毀前依然起作用)
(3) 如果成員物件中存在于其他一個或多個物件啊你個共享的情況就必須使用“參考計數”來跟蹤仍舊訪問這共享物件數量 -
構造器內部的多型方法的行為
(1) 初始化
i.在其他任何事物沒有發生之前,將分配給物件的存盤空間初始化為零
ii.呼叫基類構造器
iii.按照宣告的順序呼叫成員初始化方法
iv.呼叫匯出類構造器主體(2) 用盡可能簡單的方法使物件進入正常狀態,盡量避免呼叫其他方法
(3) 在構造器中呼叫的唯一方法就是final方法(final方法不能被復寫)
4.協變回傳型別
- 基類被匯出類覆寫的方法,回傳型別可以是:基類方法的放回型別的匯出型別
5.用繼承進行設計
-
用繼承表達行為之間的差異,并用欄位表狀態上的變化
-
純繼承與拓展
(1) 只有在基類中已經建立的方法才能在匯出類中被覆寫
(2) 也可以認為是一種純替代
(3) 基類可以接收任何發送給匯出類的訊息,因為兩者介面相同
(4) 匯出類中,拓展介面不能被基類訪問,因此一旦“向上轉型”就不能呼叫新方法 -
向下轉型與運行時型別識別
(1) 在繼承層次中向下移動【強制型別轉換(因為匯出類的型別就是基類所以需要強制型別轉換)為匯出類,從而控制匯出類有而基類沒有的方法】
(2) 如果型別錯誤,會報錯ClassCastException
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/166058.html
標籤:其他
下一篇:竭盡全力斬獲美團點評offer!美團點評高級1234面:演算法+HashMap+Zookeeper+執行緒+Redis+kafka
