java多態 -- 貓狗案列


我們用貓狗案例來表明在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();

         這樣減少的是工具類中的冗余代碼。

 

  以上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM