国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

初始化基礎類

2019-11-18 11:51:06
字體:
供稿:網(wǎng)友

  由于這兒涉及到兩個類——基礎類及衍生類,而不再是以前的一個,所以在想象衍生類的結(jié)果對象時,可能會產(chǎn)生一些迷惑。從外部看,似乎新類擁有與基礎類相同的接口,而且可包含一些額外的方法和字段。但繼續(xù)并非僅僅簡單地復制基礎類的接口了事。創(chuàng)建衍生類的一個對象時,它在其中包含了基礎類的一個“子對象”。這個子對象就象我們根據(jù)基礎類本身創(chuàng)建了它的一個對象。從外部看,基礎類的子對象已封裝到衍生類的對象里了。
  
  當然,基礎類子對象應該正確地初始化,而且只有一種方法能保證這一點:在構(gòu)建器中執(zhí)行初始化,通過調(diào)用基礎類構(gòu)建器,后者有足夠的能力和權(quán)限來執(zhí)行對基礎類的初始化。在衍生類的構(gòu)建器中,java會自動插入對基礎類構(gòu)建器的調(diào)用。下面這個例子向大家展示了對這種三級繼續(xù)的應用:
  
  //: Cartoon.java
  // ConstrUCtor calls during inheritance
  
  class Art {
   Art() {
    System.out.   }
  }
  
  class Drawing extends Art {
   Drawing() {
    System.out.println("Drawing constructor");
   }
  }
  
  public class Cartoon extends Drawing {
   Cartoon() {
    System.out.println("Cartoon constructor");
   }
   public static void main(String[] args) {
    Cartoon x = new Cartoon();
   }
  } ///:~
  
  該程序的輸出顯示了自動調(diào)用:
  
  Art constructor
  Drawing constructor
  Cartoon constructor
  
  可以看出,構(gòu)建是在基礎類的“外部”進行的,所以基礎類會在衍生類訪問它之前得到正確的初始化。
  
  即使沒有為Cartoon()創(chuàng)建一個構(gòu)建器,編譯器也會為我們自動合成一個默認構(gòu)建器,并發(fā)出對基礎類構(gòu)建器的調(diào)用。
  
  1. 含有自變量的構(gòu)建器
  
  上述例子有自己默認的構(gòu)建器;也就是說,它們不含任何自變量。編譯器可以很輕易地調(diào)用它們,因為不存在具體傳遞什么自變量的問題。假如類沒有默認的自變量,或者想調(diào)用含有一個自變量的某個基礎類構(gòu)建器,必須明確地編寫對基礎類的調(diào)用代碼。這是用super要害字以及適當?shù)淖宰兞苛斜韺崿F(xiàn)的,如下所示:
  
  //: Chess.java
  // Inheritance, constructors and arguments
  
  class Game {
   Game(int i) {
    System.out.println("Game constructor");
   }
  }
  
  class BoardGame extends Game {
   BoardGame(int i) {
    super(i);
    System.out.println("BoardGame constructor");
   }
  }
  
  public class Chess extends BoardGame {
   Chess() {
    super(11);
    System.out.println("Chess constructor");
   }
   public static void main(String[] args) {
    Chess x = new Chess();
   }
  } ///:~
  
  假如不調(diào)用BoardGames()內(nèi)的基礎類構(gòu)建器,編譯器就會報告自己找不到Games()形式的一個構(gòu)建器。除此以外,在衍生類構(gòu)建器中,對基礎類構(gòu)建器的調(diào)用是必須做的第一件事情(如操作失當,編譯器會向我們指出)。
  
  2. 捕捉基本構(gòu)建器的違例
  
  正如剛才指出的那樣,編譯器會強迫我們在衍生類構(gòu)建器的主體中首先設置對基礎類構(gòu)建器的調(diào)用。這意味著在它之前不能出現(xiàn)任何東西。正如大家在第9章會看到的那樣,這同時也會防止衍生類構(gòu)建器捕捉來自一個基礎類的任何違例事件。顯然,這有時會為我們造成不便。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 延庆县| 思南县| 鄂伦春自治旗| 徐州市| 凤山市| 临邑县| 庆安县| 阿合奇县| 康定县| 长白| 陕西省| 海门市| 丰都县| 泽库县| 兴业县| 兴宁市| 华容县| 乐昌市| 甘洛县| 鹰潭市| 平陆县| 石河子市| 龙口市| 雷波县| 太仓市| 樟树市| 凤山县| 巴楚县| 新余市| 西平县| 浦江县| 凤翔县| 互助| 耿马| 荃湾区| 宣汉县| 文化| 怀宁县| 新田县| 来安县| 白城市|