Java中多态的好处:

  • 提高了代码的维护性(继承保证)
  • 提高了代码的扩展性

猫狗案例举例:

//定义一个动物类
class Animal {public void eat() {System.out.println("eat");}public void sleep() {System.out.println("sleep");}
}
//定义一个狗类
class Dog extends Animal {public void eat() {System.out.println("狗吃肉");}public void sleep() {System.out.println("狗站着睡觉");}
}
//定义一个猫类
class Cat extends Animal {public void eat() {System.out.println("猫吃鱼");}public void sleep() {System.out.println("猫趴着睡觉");}
}
//定义一个猪类
class Pig extends Animal {public void eat() {System.out.println("猪吃白菜");}public void sleep() {System.out.println("猪侧着睡");}
}
//针对动物操作的工具类
class AnimalTool {private AnimalTool() {}//调用猫的功能/*public static void useCat(Cat c) {c.eat();c.sleep();}//调用狗的功能public static void useDog(Dog d) {d.eat();d.sleep();}//调用猪的功能public static void usePig(Pig p) {p.eat();p.sleep();}*/public static void useAnimal(Animal a) {a.eat();a.sleep();}
}
class DuoTaiDemo2 {public static void main(String[] args) {//我喜欢猫就养了一只Cat c = new Cat();c.eat();c.sleep();//我很喜欢猫,所以,又养了一只Cat c2 = new Cat();c2.eat();c2.sleep();//我特别喜欢猫,又养了一只Cat c3 = new Cat();c3.eat();c3.sleep();//...System.out.println("----------");//问题来了,我养了很多只猫,每次创建对象是可以接受的//但是呢?调用方法,你不觉得很相似吗?仅仅是对象名不一样。//我们准备用方法改进//调用方式改进版//useCat(c);//useCat(c2);//useCat(c3);//AnimalTool.useCat(c);//AnimalTool.useCat(c2);//AnimalTool.useCat(c3);AnimalTool.useAnimal(c);AnimalTool.useAnimal(c2);AnimalTool.useAnimal(c3);System.out.println("----------");//我喜欢狗Dog d = new Dog();Dog d2 = new Dog();Dog d3 = new Dog();//AnimalTool.useDog(d);//AnimalTool.useDog(d2);//AnimalTool.useDog(d3);AnimalTool.useAnimal(d);AnimalTool.useAnimal(d2);AnimalTool.useAnimal(d3);System.out.println("----------");//我喜欢宠物猪//定义一个猪类,它要继承自动物,提供两个方法,并且还得在工具类中添加该类方法的调用Pig p = new Pig();Pig p2 = new Pig();Pig p3 = new Pig();//AnimalTool.usePig(p);//AnimalTool.usePig(p2);//AnimalTool.usePig(p3);AnimalTool.useAnimal(p);AnimalTool.useAnimal(p2);AnimalTool.useAnimal(p3);System.out.println("----------");//我喜欢宠物狼,老鼠,豹子...//定义对应的类,继承自动物,提供对应的方法重写,并在工具类添加方法调用//前面几个必须写,我是没有意见的,//但是工具类每次都改,麻烦不?//我就想你能不能不改了//太简单,我把所有动物都写完。问题是名字是什么呢?到底哪些需要被加入呢?//改用另一种解决方案}/*//调用猫的功能public static void useCat(Cat c) {c.eat();c.sleep();}//调用狗的功能public static void useDog(Dog d) {d.eat();d.sleep();}*/
}

多态的弊端:

  • 不能使用子类的特有功能

代码举例:

class Fu {public void show() {System.out.println("show fu");}
}
class Zi extends Fu {public void show() {System.out.println("show zi");}public void method() {System.out.println("method zi");}
}
class DuoTaiDemo3 {public static void main(String[] args) {//测试Fu f = new Zi();f.show();f.method();}
}

运行会报错:找不到符号。
所以这就体现了多态的弊端:不能使用子类的特有功能。

Java中使用多态的好处和弊端及其举例相关推荐

  1. 何为Java 中的多态?

    Java 中的多态一般分为两种:重写式多态和重载式多态. 重载式多态,也叫编译时多态.也就是说这种多态再编译时已经确定好了.重载大家都知道,方法名相同而参数列表不同的一组方法就是重载.在调用这种重载的 ...

  2. java多态 降低代码耦合性_深度分析:理解Java中的多态机制,一篇直接帮你掌握!...

    Java中的多态 1 多态是什么 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态.用白话来说,就是多个对象调用同一 ...

  3. Day11多态部分-6 【1.5 多态的好处和弊端】

    [1.5 多态的好处和弊端] [多态的好处] :提高了程序的扩展性 作用体现在方法的形参列表 被继承/被实现的类/接口 当做形参传递 可以接收任意子类的对象 [多态的弊端]:虽然提高了程序的扩展性 但 ...

  4. java中的多态_Java中的多态

    多态与HoFs 朋友们好久不见啊,最近笔者同时在写脚本型语言--JavaScript,和工业级的面向对象语言--Java. 在写代码的同时呢,也会思考这些语言的不同.今天就拿 Java 中的多态,来谈 ...

  5. java根据父类找子类_在java中实现多态时,可以通过父类变量引用子类的对象。_学小易找答案...

    [单选题]对于字符串s="java",下面哪个选项返回字符在字符串中'v'的位置( ). [简答题]汽车核保的主要内容 [判断题]在java中产生子类对象时,直接调用子类的构造方法 ...

  6. java中实现多态的机制

    多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性.在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度:今天我们再次 ...

  7. Java中关于多态的理解

    Java中多态的理解 JAVA中的多态可以简单的理解为一种事物的多种形态,当然多态是在继承的基础上有重写才存在.(因为这篇文章是转载过来的,大部分地方持支持的态度,但也有一些地方存在个人态度,比如这里 ...

  8. 浅谈java中的多态

    浅谈java中的多态 学习了java一年的时间,这里对java的多态进行了一个总结,如有错误希望可以指出, 首先java的多态分为编译时的多态和运行时的多态,其中编译时的多态就是方法的重载(前期绑定) ...

  9. Java中的多态:什么是多态?

    Java中的多态:什么是多态? 多态性是面向对象编程的三大重要特征之一,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类 ...

  10. java中实现多态的机制是什么_java多态机制是什么

    java多态机制是什么 java中实现多态的机制是依靠父类或接口的引用指向子类.从而实现了一个对象多种形态的特性.其中父类的引用是在程序运行时动态的指向具体的实例,调用该引用的方法时,不是根据引用变量 ...

最新文章

  1. php 字母转换成小写字母,PHP中将大写字母转换为小写字母的函数是_________
  2. java web七:http协议
  3. win10下vs2015编译的程序如何运行在win7等系统(无需安装Redistributable)
  4. 半导体公司IC设计环境概况
  5. lamp php5.5,CentOS 5.5快速搭建Apache+PHP5+MySQL完美Web服务器(LAMP)
  6. SQL Where in list 问题
  7. python本地库_Python学习第71课-本地建立repository仓库
  8. java script数据类型_javascript 六种数据类型
  9. 《剑指Offer》 从上往下打印出二叉树
  10. JAVA开发面试常问问题总结1
  11. 【引用】窗口处理技巧大全 vb(窗体控件)
  12. POJ 1755 Triathlon(半平面交)
  13. 北京市海淀区卫星地图离线包下载
  14. 在thinkpad sl400上U盘安装centos6.3的过程
  15. 我们不曾向这个世界的庸俗低头
  16. 网站安全检测及安全工具
  17. SamSung WLAN AP:RCE漏洞复现
  18. Android流量统计
  19. 使用mysqldump+WinRAR压缩备份数据库
  20. Dynamips路由模拟器使用心得

热门文章

  1. supp(f)支撑集
  2. 杭州云栖大会“弹性计算用户实践专场”等你来
  3. 专访阿里云 RocketMQ 团队:现代微服务架构需要新的消息系统
  4. 以清净心看世界,以欢喜心过生活,以平常心生情味,以柔软心除挂碍。
  5. c++ primer plus学习笔记(7)——类继承
  6. 《工业控制系统信息安全防护指南》实施建议 (上)
  7. w3wp ash oracle,巧妙使用ASH信息
  8. 关于视频编码I P B帧存储,编码,解码,显示顺序的理解
  9. CTWAP、CTNET、彩信
  10. Linux之奇怪的知识---supervisor超级守护进程的意义和使用方法