java 編程思想之7.2.1初始化基類

來源:互聯網
上載者:User

標籤:

繼承是所有OOP語言不可缺少的能成部分。但繼承並不只是複製基類的介面。當建立一個匯出類的對象時,該對象包含了一個基類的子物件。這個子物件與你用基類直接建立的對象是一樣的。二者的區別在於,後者來自於外部,而基類的子物件被封裝在匯出類對象內部。

對基類子物件的正確初始化順序之前不能說不知道,好像所有知道點都一樣,只是去看,就覺得自己掌握了,其實不是。那隻是當時的自以為。呵呵,眼高手低。今天看到相關的章節,翻翻又是覺得都是自己知道的呀。也許是對同一個知識點有過太多次這種想,於是今天決定不只是看,不只是自以為的知道。動動手敲些例子吧。做了開發三年半了,也不算是個菜鳥了吧。之前項目一直安排相當緊湊,三年多大多隻是在實現功能,趕進度。少知又少的去研究本質。現在處於項目空閑期也三四個月了。一度覺得應該迴歸本質好好書本及語言本質而不是一味的實現實現。好吧,開了個小差,迴歸正題。先看我敲的簡單不能基礎了的JAVA小樣本:

對基類子物件的正確初始化,僅有一種方法可以保證這一點,在構造器中調用基類構造器來執行初始化,而基類構造器具有執行基類初始化所需要的所有知識能力。Java會自動在匯出類的構造器中插入對基類構造器的調用。

預設構造器

package com.ebao.java.constructor;

public class ClassA {
 ClassA(){
  System.out.println("==============ClassA");
 }
}

 

package com.ebao.java.constructor;

public class ClassB {
 ClassB(){
  System.out.println("==============ClassB");
 }
}

 

package com.ebao.java.constructor;

public class ClassC extends ClassA {
 ClassB cb = new ClassB();
 public static void main(String[] arg){
  ClassC cc = new ClassC();
 }
}

運行結果:  

  //==============ClassA
  //==============ClassB

由此看出執行個體一個類時,構建過程是從基類向下擴充。然後是成員對象。所以基類構造器總是會被調用且是在匯出類構造器之前被調用。

 

帶參數的構造器

上面的例子中都是預設構造器,也就是都是不帶參數的構造器。編譯器可以輕鬆的調用它們是因為不必考慮要傳遞什麼樣的參數的問題。但是如果沒有預設的基類構造器,或者想調用一個帶參數的基類構造器。就必須用super顯式地編寫調用基類構造器的語句,並配以適當的參數列表:

public class Game {
 Game(int i){
  System.out.println("---------------------Game");
 }
}

 

package com.ebao.java.constructor;

public class BoardGame extends Game {
 BoardGame(int i){
  super(i);
  System.out.println("--------------------BoardGame");
 }
}

 

package com.ebao.java.constructor;

public class Chess extends BoardGame {
 Chess(int i) {
  super(i);
  System.out.println("--------------------Chess");
 }
 public static void main(String[] arg){
  Chess cs = new Chess(7);
 }
}

運行結果:

---------------------Game
--------------------BoardGame
--------------------Chess

如果不在子類中顯示調用基類構造器或調用類基構造器不是第一句編譯報錯如下

 

java 編程思想之7.2.1初始化基類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.