標籤:關係 訪問 引用 講解 功能 執行個體 實值型別 重要 最好
1.繼承中構造方法的關係
1.子類中所有的構造方法預設都會訪問父類中空參數的構造方法,除非顯式使用super/this調用了父類或者是本類的其他構造方法。
2.在類中對本類或者是父類構造方法的調用,只能是在構造方法中,不能在執行個體方法中調用構造方法(更不能在類方法中調用構造方法),原因:
- 執行個體方法被調用時,說明執行個體對象已經被建立完了,此時不能再使用this/super去初始化本執行個體或者是父類執行個體
- 類方法是在本類載入的時候就已經載入的,這時執行個體對象還沒有被建立出來,是不能使用this或者super的
2.
因為子類會繼承父類中的資料(成員變數),可能還會使用父類的資料。
所以,子類初始化之前,一定要先完成父類資料的初始化。
換句話說,一個對象的建立意味著它的所有的父類都會被建立出來。
3.子類構造方法的第一條語句:
如果是this(...)表明調用的是本類的另一個構造方法,在另一個構造方法中還可以繼續使用this(...)調用本類其他的構造方法,如果有多個構造方法的話,可以繼續調用下去,但是不能遞迴調用,最終總會有一個構造方法,第一條語句不是this()了。
這時,可以顯式的調用父類的構造方法super(...);或者什麼都不寫,這時系統預設調用父類的空參構造方法。
總之,當子類對象被建立的時候,總是會先調用父類的構造方法,直到Object這個最上層的對象被建立出來之後,其下的子類對象才會被建立出來。
4.考察父類,子類代碼塊的執行順序
從這個案例中能看到有繼承關係的類的執行個體初始化的過程,以及為什麼在類方法中不能使用this或者是super關鍵字
5.如果父類中沒有空參構造方法,怎麼辦?
1.子類可以通過super去顯式調用父類其他的帶參的構造方法
2.子類可以通過this去調用本類的其他構造方法,但是本類其他構造也必須首先用super(...)訪問了父類的帶參構造(因為父類沒有空參構造)
6.總結
如果父類沒有空參構造,子類的構造方法中就必須顯式調用父類帶參構造super(...);
一定要注意:
super(…)或者this(…)必須出現在構造方法第一條語句上
否則,就會有父類資料的多次初始化
7.如果父類沒有無參構造方法,那麼子類的構造方法會出現什麼現象呢?
報錯。
如何解決呢?
A:在父類中加一個無參構造方法
B:通過使用super關鍵字去顯示的調用父類的其他帶參構造方法
C:子類通過this去調用本類的其他構造方法
子類中一定要有一個去訪問了父類的構造方法,否則父類資料就沒有初始化。
注意事項:
this(...)或者super(...)必須出現在第一條語句上。
如果不是放在第一條語句上,就可能對父類的資料進行了多次初始化,所以必須放在第一條語句上。
8.繼承中成員方法的關係
子父類中存在同名和不同名的成員方法
結論:
通過子類對象去訪問一個執行個體方法
首先在子類中找(是否子類進行了重寫,或者是子類特有的方法)
然後在父類中找(子類沒重寫,而是從父類繼承而來的)
9.繼承中成員方法的關係:
A:子類中的方法和父類中的方法聲明不一樣,這個太簡單。
B:子類中的方法和父類中的方法聲明一樣,這個該怎麼?
通過子類對象調用方法:
a:先找子類中,看有沒有這個方法,有就使用
b:再看父類中,有沒有這個方法,有就使用
c:如果沒有就報錯。
10.方法重寫概述
方法重寫概述
稱為方法覆蓋Override/重寫OverWrite
使用特點:
- 如果方法名不同,就調用對應的方法
- 如果方法名相同,最終使用的是子類自己的(使用子類的引用的時候,在多態情況下,使用父類的引用,則有可能調用的是父類的靜態方法)
方法重寫的應用:
- 當子類需要父類的功能,而功能主體子類有自己特有內容時,可以重寫父類中的方法,這樣,即沿襲了父類的功能,又定義了子類特有的內容。
- 方法的重寫是多態實現的條件
11.方法重寫的注意事項
- 父類中私人方法不能被重寫,編譯報錯
- 子類重寫父類方法時,存取權限不能更低(後面講),否則編譯報錯
- 子類重寫父類方法,傳回值類型可以相同,或者是父類傳回值類型的子類型
- 父類的執行個體方法(非靜態方法),子類不能重新定義為靜態方法
- 父類靜態方法(類方法),子類也必須通過靜態方法進行“重寫”(雖然編譯和使用都不報錯,但其實這個算不上方法重寫,但是現象確實如此,至於為什麼算不上方法重寫,多態中會講解)
- 子類中重寫父類方法,按照重寫的原則(存取權限不能變小,傳回值同類或者子類,方法名相同,形參列表相同);否則子類中定義的同名方法就是方法的重載(繼承而來的方法和子類定義的方法構成重載),重載就必須讓參數列表不同。如果子類方法只與繼承自父類的方法傳回值不同,不能構成重載
- 子類如果想重寫父類的方法,最好是讓方法的簽名一模一樣
(重寫方法的一個重要用途就是:父類的引用能夠指向子類的方法,但是靜態方法的“重寫”,在多態中依然調用的是父類的方法,所以,從這個角度上來講,子類對父類的靜態方法的重寫不能算是真正方法的重寫)
12.方法重寫的注意事項
A:父類中私人方法不能被重寫
因為父類私人方法子類根本就無法繼承
B:子類重寫父類方法時,存取權限不能更低,最好就一致
C:父類靜態方法,子類也必須通過靜態方法進行重寫
其實這個算不上方法重寫,但是現象確實如此,至於為什麼算不上方法重寫,多態中講解
子類重寫父類方法的時候,最好聲明一模一樣。
否則同名的方法就是方法的重載了,就必須讓形參列表不同
大資料JAVA基礎第十一天