大資料JAVA基礎第十一天

來源:互聯網
上載者:User

標籤:關係   訪問   引用   講解   功能   執行個體   實值型別   重要   最好   

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基礎第十一天

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.