目的:使用類而不破壞現有程序代碼。設計模式
方法:安全
1.組合(在新類中產生現有類的對象,經常使用),其較爲普通的意思是在新類中建立某一個類的對象,而後使用其方法.net
2.繼承(繼承某個類,不經常使用)設計
以上兩種方法都能從現有類型生成新類型代理
繼承對象
1.初始化基類繼承
因爲如今涉及基類和導出類這兩個類,而不是隻有一個類,因此要試着想象處處類所產生的結果對象,會有點困惑。從外部來看,它就像是一個與基類具備相同接口的新類,或許還會有一些額外的方法和域。但繼承並不僅是複製基類的接口。當建立了一個導出類的對象的時,對象包含了一個基類的子對象。這個子對象與你用基類直接建立的對象是同樣的。兩者的區別在於,後者來自於外部,而基類的子對象被包裝在導出類對象內部。接口
以上的話摘自於Think in Java,實際上描述的意思如如下代碼所示開發
public class A{get
}
class B extend A{
}
其中 A a = new A(),a爲基類直接建立的對象,B b = new B(),B 爲導出類的對象。簡單的理解能夠說父類是基類,子類是導出類。
能夠發現基類是「向外」擴散的,因此基類在導出類構造器能夠訪問它以前,就已經完成初始化了。即便你不爲B()建立構造器,編譯器也會爲你合成一個默認的構造器,該構造器將調用基類的構造器。
代理
參考文章設計模式之代理模式
向上轉型
如圖所示,即是向上轉型的一個過程,A a = new B();這種將B引用轉換爲A引用的操做,稱之爲向上轉型。
爲何成爲向上轉型
歷史緣由:以傳統的類繼承圖的繪製方法爲基礎的:將根置於頁面的頂端,而後逐漸向下。
由導出類轉型成基類,在繼承圖上是向上移動的,所以通常稱爲向上轉型。因爲向上轉型是從一個較專用類型將較通用類型轉換,因此老是很安全的。在向上轉型的過程當中,類接口中惟一可能發生的事情是丟失方法,而不是獲取它們。
結尾,再次分析組合與繼承
在面向對象過程當中,生成和使用程序代碼最有可能採用的方法是直接將數據和方法包裝進一個類中,並使用該類的對象。也能夠運用組合技術使用現有的類來開發新的類;而繼承技術實際上是不太經常使用的。所以應當慎用繼承,一個最清晰的判斷方法就是問一問本身是否須要重新類向基類向上轉型。若是必須向上轉型,則繼承是必要的;