繼承和組合

轉載出處,很不錯的文章收藏學習http://blog.csdn.net/zhuanshenfanhua123/article/details/14119759



1.相同點:二者都是實現類重用的重要方式。

2.不同點:繼承會破壞封裝性。

例:

[java] view plain copy
  1. class A   
  2. {  
  3.      public void fun(){}  
  4.      public void breath(){}  
  5. }  
  6. class B extends A  
  7. {  
  8.      public void funb(){}  
  9. }  
  10. class C extends A  
  11. {  
  12.       public void func(){}  
  13. }  
則B,C對象則能夠訪問A中的public方法和屬性,在一定程度上破壞了類的封裝性。

使用組合的方法如下:

[java] view plain copy
  1. class A   
  2. {  
  3.      public void fun(){}  
  4.      public void breath(){}  
  5. }  
  6. class B   
  7. {  
  8.      private A a;//將原來的父類嵌入原來的子類中,作爲子類的一部分  
  9.      public void funb(){}       
  10.      public B(A a)       
  11.      {this.a=a;}       
  12.      public void breath(){a.breath();}//實現複用}  
  13.        }  
  14.  class C {        
  15.           private A a;        
  16.           public C(A a)        
  17.          {this.a=a;}        
  18.           public void breath(){a.breath();}  
[java] view plain copy
  1. }  

3.何時用繼承,何時用組合?

繼承是對已有的類進行改造,父類中主要是包含通用的屬性和方法,獲得的子類是一個特殊版本的類,將具有明顯繼承關係的兩個類使用繼承,比如動物和狗,狗不是由動物組成的,而狗可以繼承動物的通用屬性和方法,則使用繼承比較合適。

如果爲人和腿的話,則明顯腿是人的組成部分,使用組合比較合適。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章