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

java多态 -- 猫狗案列相关推荐

  1. java多态猫狗吃骨头_javaSE学习(6):面向对象:多态的两个经典案例(猫狗案例和南北方人案例)...

    1.猫狗多态案例 /* 2019年5月19日9点48 @author 潇雷 猫狗案例多态版: */ class Animal{ public void eat(){ System.out.printl ...

  2. JAVA流浪猫狗救助平台

    JAVA流浪猫狗救助.zip-其它文档类资源-CSDN下载 JAVA流浪猫狗救助平台 1.数据库设计 2.运行截图 首页 欢迎页 领养中心 登录 Java+SSM 完整版源码请在我主页资源里面下载

  3. 基于JAVA流浪猫狗救助网站计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA流浪猫狗救助网站计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA流浪猫狗救助网站计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  4. Java案例——猫狗案例加入跳高功能分析及其代码实现(面向对象)

    动物类:姓名,年龄,吃饭,睡觉.              动物培训接口:跳高              猫继承动物类               狗继承动物类              部分猫继承猫 ...

  5. 案例 猫狗跳高 java 1614102273

    案例 猫狗跳高 java 1614102273 案例信息 实现 来一个接口 抽象的动物类 猫类继承与实现 测试类 接口多态与抽象类多态 对象只能调对应的方法(接口类或抽象类中的)

  6. Java软件研发工程师转行之深度学习(Deep Learning)进阶:手写数字识别+人脸识别+图像中物体分类+视频分类+图像与文字特征+猫狗分类

    本文适合于对机器学习和数据挖掘有所了解,想深入研究深度学习的读者 1.对概率基本概率有所了解 2.具有微积分和线性代数的基本知识 3.有一定的编程基础(Python) Java软件研发工程师转行之深度 ...

  7. JAVA中在某游戏系统有猫狗猪_算法面试题之猫狗队列(java)

    [题目]: 已知有宠物:狗.猫如下,实现一种猫狗队列的结构: /** * @ClassName Pet * @Description 宠物 * @Author Huarray * @Date 2019 ...

  8. [Java基础]线程同步之卖票案列分析

    案列: 卖票. 需求: 某电影院目前正在上映国产大片,共有100张票,而它有3个窗口卖票,请设计一个程序模拟该电影院卖票. 代码如下: package SellTicketPack;public cl ...

  9. Java项目:流浪猫狗救助管理系统(java+SSM+JSP+bootstrap+jQuery+mysql)

    源码获取:博客首页 "资源" 里下载! 项目介绍 流浪猫狗救助管理系统.该项目分为前后台: 前台主要功能包括:会员的注册登陆,流浪猫狗知识,领养中心,团队活动,流浪宠物详情,申请领 ...

  10. Java Web应用案列:蒙西购物1

    Java Web应用案列:蒙西购物 功能需求 1.只有注册用户成功登录之后才可查看商品类别,查看商品,选购商品,生成订单.查看订单. 2.只有管理员才有权限进行购物网后台管理(用户管理+类别管理+商品 ...

最新文章

  1. 一款非常不错的聊天工具
  2. 使用Redis存储Nginx+Tomcat负载均衡集群的Session
  3. 基于ESP32的竞赛裁判系统功能调试-光电条检测板
  4. Acwing第 17 场周赛【完结】
  5. [常用类]Scanner 类
  6. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车超声波避障实验(无舵机)
  7. 优达学城数据分析师纳米学位——P5项目知识点整理贝叶斯规则
  8. Tomcat(Windows)
  9. python生成json_生成动态嵌套JSON对象和数组-python - python
  10. 插入1000万条数据到mysql数据库表
  11. linux删除命令_【小技巧】Linux命令的快捷键
  12. 网页版电脑桌面远程操控_我真的再也不买电暖器了 - 电暖器智能版
  13. 2022年软考系统架构师论文真题
  14. [译] 为什么加密货币泡沫会破裂?
  15. mybatis 批量新增 批量修改
  16. easypoi 合并单元格 横向 纵向
  17. 字节跳动杨震原:A/B测试不是万能的,但不会一定不行 ​
  18. sonarqube+sonar-scanner+jenkins安装配置及使用
  19. VSCode lua插件LuaHelper
  20. 美联储缩表对外汇市场有什么影响?汇友必入区

热门文章

  1. Linux Entering rescue mode
  2. C语言文件指针偏移的使用(点阵字库txt文件取字)
  3. 百度富文本编辑器使用
  4. 自媒体行业现在还能赚钱吗?
  5. pygame中的mixer(含music)模块
  6. 什么是java抽象_什么是java抽象
  7. html5+简约登录页面,简洁时尚的CSS3用户登录界面设计
  8. 台灯c语言,Jya无线台灯C 告诉你如何重新定义光的含义
  9. 基于阿里云的一般性系统安全措施介绍
  10. React的调和过程