国产麻豆精品视频-国产麻豆精品免费视频-国产麻豆精品免费密入口-国产麻豆精品高清在线播放-国产麻豆精品hdvideoss-国产麻豆精品

始創于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業
  • 60秒人工響應
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補償
您的位置: 網站首頁 > 幫助中心>文章內容

到底選擇合成還是繼承

發布時間:  2012/9/1 16:51:37

無論合成還是繼承,都允許我們將子對象置于自己的新類中。大家或許會奇怪兩者間的差異,以及到底該如
何選擇。
如果想利用新類內部一個現有類的特性,而不想使用它的接口,通常應選擇合成。也就是說,我們可嵌入一
個對象,使自己能用它實現新類的特性。但新類的用戶會看到我們已定義的接口,而不是來自嵌入對象的接
口。考慮到這種效果,我們需在新類里嵌入現有類的private 對象。
有些時候,我們想讓類用戶直接訪問新類的合成。也就是說,需要將成員對象的屬性變為public。成員對象
會將自身隱藏起來,所以這是一種安全的做法。而且在用戶知道我們準備合成一系列組件時,接口就更容易
理解。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);
}
} ///:~
由于汽車的裝配是故障分析時需要考慮的一項因素(并非只是基礎設計簡單的一部分),所以有助于客戶程
序員理解如何使用類,而且類創建者的編程復雜程度也會大幅度降低。
如選擇繼承,就需要取得一個現成的類,并制作它的一個特殊版本。通常,這意味著我們準備使用一個常規
用途的類,并根據特定的需求對其進行定制。只需稍加想象,就知道自己不能用一個車輛對象來合成一輛汽


車——汽車并不“包含”車輛;相反,它“屬于”車輛的一種類別。“屬于”關系是用繼承來表達的,而
“包含”關系是用合成來表達的。
本文出自:億恩科技【www.artduck.net】

服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線