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