我們用貓狗案例來表明在java中使用多態的好處:
1 class Animal{ 2 public Animal(){} 3 public void eat(){ 4 System.out.println("吃飯"); 5 } 6 public void sleep(){ 7 System.out.println("睡覺"); 8 } 9 } 10 class Cat extends Animal{ 11 public Cat(){} 12 public void eat(){ 13 System.out.println("貓吃魚"); 14 } 15 public void sleep(){ 16 System.out.println("貓趴着睡覺"); 17 } 18 } 19 class Dog extends Animal{ 20 public Dog(){} 21 public void eat(){ 22 System.out.println("狗吃肉"); 23 } 24 public void sleep(){ 25 System.out.println("狗站着睡覺"); 26 } 27 } 28 class Pig extends Animal{ 29 public Pig(){} 30 public void eat(){ 31 System.out.println("豬吃草"); 32 } 33 public void sleep(){ 34 System.out.println("豬也趴着睡覺"); 35 } 36 } 37 38 class AnimalTool{ 39 //總結: 使用static方法與priva的原因是,避免有些笨蛋 40 //直接使用創建工具類對象的方式來訪問工具類中的方法 41 private AnimalTool(){} 42 /*public static void useCat(Cat c){ 43 c.eat(); 44 c.sleep(); 45 } 46 public static void useDog(Dog d){ 47 d.eat(); 48 d.sleep(); 49 } 50 public static void usePig(Pig p){ 51 p.eat(); 52 p.sleep(); 53 } 54 */ 55 public static void useAnimal(Animal a){ 56 a.eat(); 57 a.sleep(); 58 } 59 60 } 61 class DuoTaiDemo2{ 62 public static void main(String []args){ 63 Cat c=new Cat(); 64 c.eat(); 65 c.sleep(); 66 67 Cat c2=new Cat(); 68 c2.eat(); 69 c2.sleep(); 70 71 Cat c3=new Cat(); 72 c3.eat(); 73 c3.sleep(); 74 System.out.println("----------------"); 75 //接下來是狗 76 Dog d=new Dog(); 77 d.eat(); 78 d.sleep(); 79 80 Dog d2=new Dog(); 81 d2.eat(); 82 d2.sleep(); 83 84 Dog d3=new Dog(); 85 d3.eat(); 86 d3.sleep(); 87 System.out.println("----------------"); 88 89 //接下來是 豬 90 Pig p=new Pig(); 91 p.eat(); 92 p.sleep(); 93 94 Pig p2=new Pig(); 95 p2.eat(); 96 p2.sleep(); 97 98 Pig p3=new Pig(); 99 p3.eat(); 100 p3.sleep(); 101 /* 102 System.out.println("----------接下來利用工具類實現以上效果----------"); 103 104 AnimalTool.useCat(c); 105 AnimalTool.useCat(c2); 106 AnimalTool.useCat(c3); 107 108 System.out.println("-------------"); 109 110 AnimalTool.useDog(d); 111 AnimalTool.useDog(d2); 112 AnimalTool.useDog(d3); 113 114 System.out.println("-------------"); 115 116 AnimalTool.usePig(p); 117 AnimalTool.usePig(p2); 118 AnimalTool.usePig(p3); 119 */ 120 System.out.println("----------接下來利用【多態性】類實現以上效果----------"); 121 Animal cc=new Cat(); 122 AnimalTool.useAnimal(cc); 123 124 Animal dd=new Dog(); 125 AnimalTool.useAnimal(dd); 126 127 Animal pp=new Pig(); 128 AnimalTool.useAnimal(pp); 129 } 130 }
在這個案例中,我們分別使用了三種方法逐漸優化。
第一種---笨方式
直接利用貓狗類創建對象,多次進行調用eat sleep方法,導致存在大量冗余代碼。
第二種---創建工具類,將每個動物的eat sleep方法放在各自靜態方法中,並將工具類構造方法聲明為private,使其僅可通過類名調用。
在這種方法中,AnimalTool.useCat(c);這個語句相當於之前的 c.eat(); 兩句,按之前方法,如果我們定義非常多貓,那代碼豈不是冗余巨大?
c.sleep() ;
第三種------ 將工具類中各自的方法優化為一個:useAnimal(Animal a), 並在主函數中通過多態的方式創建對象,如 Animal a=new Cat();
這樣減少的是工具類中的冗余代碼。
以上。