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

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

到底選擇合成還是繼承

2019-11-18 12:10:14
字體:
來源:轉載
供稿:網友

  無論合成還是繼續(xù),都答應我們將子對象置于自己的新類中。大家或許會希奇兩者間的差異,以及到底該如何選擇。
  
  假如想利用新類內部一個現有類的特性,而不想使用它的接口,通常應選擇合成。也就是說,我們可嵌入一個對象,使自己能用它實現新類的特性。但新類的用戶會看到我們已定義的接口,而不是來自嵌入對象的接口。考慮到這種效果,我們需在新類里嵌入現有類的PRivate對象。
  
  有些時候,我們想讓類用戶直接訪問新類的合成。也就是說,需要將成員對象的屬性變?yōu)閜ublic。成員對象會將自身隱藏起來,所以這是一種安全的做法。而且在用戶知道我們預備合成一系列組件時,接口就更輕易理解。car(汽車)對象便是一個很好的例子:
  
  //: Car.java
  // Composition with public objects
  
  class Engine {
   public void start() {}
   public void rev() {}
   public void stop() {}
  }
  
  class Wheel {
   public void inflate(int psi) {}
  }
  
  class Window {
   public void rollup() {}
   public void rolldown() {}
  }
  
  class Door {
   public Window window = new Window();
   public void open() {}
   public void close() {}
  }
  
  public class Car {
   public Engine engine = new Engine();
   public Wheel[] wheel = new Wheel[4];
   public Door left = new Door(),
      right = new Door(); // 2-door
   Car() {
    for(int i = 0; i < 4; i++)
     wheel[i] = new Wheel();
   }
   public static void main(String[] args) {
    Car car = new Car();
    car.left.window.rollup();
    car.wheel[0].inflate(72);
   }
  } ///:~
  
  由于汽車的裝配是故障分析時需要考慮的一項因素(并非只是基礎設計簡單的一部分),所以有助于客戶程序員理解如何使用類,而且類創(chuàng)建者的編程復雜程度也會大幅度降低。
  
  如選擇繼續(xù),就需要取得一個現成的類,并制作它的一個非凡版本。通常,這意味著我們預備使用一個常規(guī)用途的類,并根據特定的需求對其進行定制。只需稍加想象,就知道自己不能用一個車輛對象來合成一輛汽車——汽車并不“包含”車輛;相反,它“屬于”車輛的一種類別。“屬于”關系是用繼續(xù)來表達的,而“包含”關系是用合成來表達的。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 吕梁市| 麻城市| 合水县| 普格县| 正阳县| 乌海市| 广德县| 扬中市| 万载县| 南充市| 华亭县| 肥城市| 双流县| 南郑县| 富平县| 辰溪县| 宜春市| 磐安县| 镇平县| 额敏县| 平果县| 荥阳市| 弥渡县| 阿拉尔市| 肇庆市| 抚顺市| 双牌县| 惠安县| 东乡县| 柳江县| 龙井市| 沂水县| 阆中市| 遂平县| 沽源县| 克拉玛依市| 吉木乃县| 来宾市| 来宾市| 萨嘎县| 中阳县|