1. 程式人生 > >chapter10 內部類-為什麼需要內部類?

chapter10 內部類-為什麼需要內部類?

為什麼需要內部類?

 

  一般說來,內部類繼承自某個類或實現某個介面,內部類的程式碼操作創造它的外圍類的物件。所以可以認為內部類提供了某種進入其外圍類的視窗。

  內部類必須要回答的一個問題是:如果只是需要一個對介面得引用,為什麼不通過外圍類實現那個介面呢?答案是:“如果這能滿足需求,那麼就應該這樣做。”那麼內部類實現一個介面與外圍類實現這個介面有什麼區別呢?答案是:後者不是總能享用到介面帶來的方便,有時需要用到介面得實現。所以,使用內部類最吸引人的原因是:每個內部類都能獨立地繼承自一個(介面的)實現,所以無論外圍類是否已經繼承了某個(介面的)實現,對於內部類都沒有影響。

  如果沒有內部類提供的,可以繼承多個具體的或者抽象的類的能力,一些設計與程式設計問題就很難解決。從這個角度看,內部類使得多重繼承的解決方案變得完整。介面解決了部分問題,而內部類有效地實現了“多重繼承”。也就是說,內部類允許繼承多個非介面型別(注:類或抽象類)。

  如果不需要解決“多重繼承”的問題,那麼自然可以用別的方式編碼,而不需要使用內部類。但如果使用內部類,還可以獲得其他一些特性:

  1)內部類可以有多個例項,每個例項都有自己的狀態 資訊,並且與其他外圍物件的資訊相互獨立。

  2)在單個外圍類中,可以讓多個內部類以不同的方式實現同一個介面,或繼承同一個類。

  3)建立內部類物件的時刻並不依賴於外圍類物件的建立。

  4)內部類並沒有令人迷惑的“is-a”關係;它就是一個獨立的實體。