多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数实现的。

Java 的多态实现有以下几个条件:

  1. 继承
  2. 重写
  3. 父类引用指向子类对象

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理

public class polymorphicTEST {public static void main(String[] args) {show(new Cat());  // 以 Cat 对象调用 show 方法show(new Dog());  // 以 Dog 对象调用 show 方法Animal a = new Cat();  // 向上转型  a.eat();               // 调用的是 Cat 的 eatCat c = (Cat)a;        // 向下转型  c.work();        // 调用的是 Cat 的 work}  public static void show(Animal a)  {a.eat();  // 类型判断if (a instanceof Cat)  {  // 猫做的事情 Cat c = (Cat)a;  c.work();  } else if (a instanceof Dog) { // 狗做的事情 Dog c = (Dog)a;  c.work();  }  }
}abstract class Animal {  abstract void eat();  //不能具体化
}  class Cat extends Animal {  public void eat() {  System.out.println("吃鱼");  }  public void work() {  System.out.println("抓老鼠");  }
}  class Dog extends Animal {  public void eat() {  System.out.println("吃骨头");  }  public void work() {  System.out.println("看家");  }
}

仔细观察可以看到它首先在主方法中把show的两种调用方法写好了,之后的向上转型把子类型的范围扩大

底下由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类。抽象的类无法进行实例化,因为他不是具体存在的类,或者说这样的类还不够完善,不能直接使用new关键字调用其构造器生成该类的对象。

eat是猫与狗都具有的行为,底下的多态继承

程序的输出结果如下:

猫、狗与Java的多态相关推荐

  1. 案例 猫狗跳高 java 1614102273

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

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

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

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

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

  4. Java 猫狗案例 多态版 抽象版 继承版

    多态版 以下的案例都是又四个类组成 animal类     animaldemo测试类    cat类     dog类 需求:     .请采用多态的思想实现猫和狗的案例,并在测试类中开始测试 思路 ...

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

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

  6. JAVA流浪猫狗救助平台

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

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

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

  8. java毕业设计流浪猫狗救助网站源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计流浪猫狗救助网站源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计流浪猫狗救助网站源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技术栈 ...

  9. java毕业设计社区流浪猫狗救助网站源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计社区流浪猫狗救助网站源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计社区流浪猫狗救助网站源码+lw文档+mybatis+系统+mysql数据库+调试 本源 ...

最新文章

  1. Udacity机器人软件工程师课程笔记(二十四) - 控制(其二) - PID优化,梯度下降算法,带噪声的PID控制
  2. mysql常见面试题
  3. idea系列主题推荐:material theme ui(Dracula)
  4. Centos 搭建activemq
  5. linux内核编译如何选择cpu类型,Ubuntu内核编译和CPU Hot-Plug特性配置全过程及遇到问题记录...
  6. docker搭建ldap
  7. python 类变量 none 内存泄露_Python中使用自定义类class作为海量数据结构时内存占用巨大的问题...
  8. 求职历程之-----我的求职信
  9. 在线火星文转换器工具
  10. linux+模块与设备关系,《Linux内核设计与实现》读书笔记 第十七章 设备与模块...
  11. 洛谷 P1881 绳子对折
  12. 玩转A2ZS,软改A4
  13. VScode如何在浏览器中打开html文件
  14. python用openpyxl模块操作Excel学习笔记
  15. 蔡康永的说话之道2-笔记
  16. NBA2K18手游显示无法连接服务器,nba2k18手游交易被拒绝 | 手游网游页游攻略大全...
  17. Mqtt精髓系列之精简之道
  18. vivo手机的android系统,vivo X3S的手机系统是什么?能升级安卓4.3吗?
  19. 小米商城app端项目
  20. java FTP连接时出现“227 Entering Passive Mode”的解决方法

热门文章

  1. Spring 3,Spring Web Services 2和LDAP安全
  2. Linux 命令之 unxz -- 解压缩文件
  3. python合并csv文件_Python学习——pandas 合并csv文件
  4. git.exe 启动 慢_四川成都surface电脑启动到一半黑屏维修服务地址电话
  5. C语言中枚举enum的用法
  6. C语言 | 赋值与运算符
  7. 在建工地扬尘在线监控系统推荐_vocs在线监控系统安装的法规依据
  8. java家具网站需求分析_基于jsp的家具销售-JavaEE实现家具销售 - java项目源码
  9. python逻辑运算符的使用_总结Python中逻辑运算符的使用
  10. 法在计算机课程中的应用,任务驱动法在计算机办公课程中的应用