博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java多态 -- 猫狗案列
阅读量:6820 次
发布时间:2019-06-26

本文共 3664 字,大约阅读时间需要 12 分钟。

我们用猫狗案例来表明在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();

         这样减少的是工具类中的冗余代码。

 

  以上。

 

转载于:https://www.cnblogs.com/huangytao/p/5660764.html

你可能感兴趣的文章
APP推广如何实现邀请追踪?
查看>>
元旦晚会年终总结汇报PPT模板
查看>>
Linux环境下运行Java项目的sh脚步
查看>>
Couldn't register xxx with the bootstrap server.
查看>>
作为管理者,如何理解数据与业务?
查看>>
precreatewindow里面做了什么
查看>>
大数据开发第一步:Hadoop基础学习
查看>>
eclipse的jvm配置
查看>>
python的常用模块
查看>>
我的友情链接
查看>>
Delphi下WebBrowser应用示例
查看>>
AS3的http
查看>>
启动模式、时钟浅见
查看>>
ORA-01033: ORACLE initialization or shutdown in progress ,Enterprise Manager Console
查看>>
Intellij IDEA 一些不为人知的技巧
查看>>
演示:如何编译tbox
查看>>
简单的安卓应用授权认证(JNI)
查看>>
查看硬盘读取速率
查看>>
把匹配的小写转换成大写(\U、\u)
查看>>
【算法】最短路径之A*搜索
查看>>