1. 程式人生 > >java繼承和組合

java繼承和組合

要實現的目標:鳥(Bird)和狼(Wolf)都是動物(Animal),動物都有心跳(beat()),會呼吸(beat()),但是鳥會fly(fly()),狼會奔跑(run()),用java程式實現以上描述。

InheritTest.java 使用繼承方式實現目標

CompositeTest.java 使用組合方式實現目標

  1. //InheritTest.java 使用繼承方式實現目標
  2. class Animal{  
  3.     privatevoid beat(){  
  4.         System.out.println("心臟跳動...");  
  5.     }  
  6.     publicvoid breath(){  
  7.         beat();  
  8.         System.out.println("吸一口氣,呼一口氣,呼吸中...");  
  9.     }  
  10. }  
  11. //繼承Animal,直接複用父類的breath()方法
  12. class Bird extends Animal{  
  13.     //建立子類獨有的方法fly()
  14.     publicvoid fly(){  
  15.         System.out.println("我是鳥,我在天空中自由的飛翔...");  
  16.     }  
  17. }  
  18. //繼承Animal,直接複用父類的breath()方法
  19. class Wolf extends Animal{  
  20.     //建立子類獨有的方法run()
  21.     publicvoid run(){  
  22.         System.out.println("我是狼,我在草原上快速奔跑...");  
  23.     }  
  24. }  
  25. publicclass InheritTest{  
  26.     publicstaticvoid main(String[] args){  
  27.         //建立繼承自Animal的Bird物件新例項b
  28.         Bird b=new Bird();  
  29.         //新物件例項b可以breath()
  30.         b.breath();  
  31.         //新物件例項b可以fly()
  32.         b.fly();  
  33.         Wolf w=new
     Wolf();  
  34.         w.breath();  
  35.         w.run();  
  36. /* 
  37. ---------- 執行Java程式 ---------- 
  38. 心臟跳動... 
  39. 吸一口氣,呼一口氣,呼吸中... 
  40. 我是鳥,我在天空中自由的飛翔... 
  41. 心臟跳動... 
  42. 吸一口氣,呼一口氣,呼吸中... 
  43. 我是狼,我在草原上快速奔跑... 
  44. 輸出完畢 (耗時 0 秒) - 正常終止 
  45. */
  46.     }  
  47. }  
  48. //CompositeTest.java  使用組合方式實現目標
  49. class Animal{  
  50.     privatevoid beat(){  
  51.         System.out.println("心臟跳動...");  
  52.     }  
  53.     publicvoid breath(){  
  54.         beat();  
  55.         System.out.println("吸一口氣,呼一口氣,呼吸中...");  
  56.     }  
  57. }  
  58. class Bird{  
  59.     //定義一個Animal成員變數,以供組合之用
  60.     private Animal a;  
  61.     //使用建構函式初始化成員變數
  62.     public Bird(Animal a){  
  63.         this.a=a;  
  64.     }  
  65.     //通過呼叫成員變數的固有方法(a.breath())使新類具有相同的功能(breath())
  66.     publicvoid breath(){  
  67.         a.breath();  
  68.     }  
  69.     //為新類增加新的方法
  70.     publicvoid fly(){  
  71.         System.out.println("我是鳥,我在天空中自由的飛翔...");  
  72.     }  
  73. }  
  74. class Wolf{  
  75.     private Animal a;  
  76.     public Wolf(Animal a){  
  77.         this.a=a;  
  78.     }  
  79.     publicvoid breath(){  
  80.         a.breath();  
  81.     }  
  82.     publicvoid run(){  
  83.         System.out.println("我是狼,我在草原上快速奔跑...");       
  84.     }  
  85. }  
  86. publicclass CompositeTest{  
  87.     publicstaticvoid main(String[] args){  
  88.         //顯式建立被組合的物件例項a1
  89.         Animal a1=new Animal();  
  90.         //以a1為基礎組合出新物件例項b
  91.         Bird b=new Bird(a1);  
  92.         //新物件例項b可以breath()
  93.         b.breath();  
  94.         //新物件例項b可以fly()
  95.         b.fly();  
  96.         Animal a2=new Animal();  
  97.         Wolf w=new Wolf(a2);  
  98.         w.breath();  
  99.         w.run();  
  100. /* 
  101. ---------- 執行Java程式 ---------- 
  102. 心臟跳動... 
  103. 吸一口氣,呼一口氣,呼吸中... 
  104. 我是鳥,我在天空中自由的飛翔... 
  105. 心臟跳動... 
  106. 吸一口氣,呼一口氣,呼吸中... 
  107. 我是狼,我在草原上快速奔跑... 
  108. 輸出完畢 (耗時 0 秒) - 正常終止 
  109. */
  110.     }  
  111. }