向上转型:子类型-->父类型,又称为自动类型转换.

向下转型:父类型-->子类型,又称为强制类型转换.

//Animal.java

package qw;

public class Animal {

public void move()

{

System.out.println("动物在移动");

}

public void eat() {

System.out.println("动物在吃");

}

}

//Bird.java

package qw;

public class Bird extends Animal{

public void fly()

{

System.out.println("小鸟在飞");

}

public void eat() {

System.out.println("小鸟在吃东西");

}

}

//Cat.java

package qw;

public class Cat extends Animal{

public void move()

{

System.out.println("猫在移动");

}

public void catchMouse()

{

System.out.println("猫在捉老鼠");

}

}

//Test.java

package qw;

public class Test {

public static void main(String[] args) {

Animal a1 = new Animal();

a1.move();

//向上转型(子对象向父对象转型),a2使用的是继承的方法,可使用方法覆盖父类继承下来的方法.

//1,编译阶段编译器检查a2这个引用的数据类型为Animal,由于Animal.class字节码当中有move()方法

//所以编译通过了,这个阶段成为静态绑定

//2,在程序运行阶段,由于JVM堆内存真实存在的对象是Cat对象,所以一定调用的是Cat对象的move()方法,这个过程

//称为动态绑定

//3.无论Cat类有没有重写方法,运行阶段调用的一定是Cat类的move()方法,因为JVM堆内存中真实存在的对象是Cat对象.

Animal a2 = new Cat();

a2.move();

a2.eat();

//如果想访问子对象特有的方法,需强制换成子对象,即向下转型(父对象向子对象转型)

if(a2 instanceof Cat) {

Cat a3 = (Cat)a2;

a3.catchMouse();

}

else {

Bird a3 = (Bird) a2;

a3.fly();

}

}

}

运行结果:

特点:无论是向上转型还是向下转型,两种类型之间一定要有继承关系,且具有面向抽象编程的特性,.

多态作用:降低程序的耦合度,提高程序的拓展力.

原文:https://blog.51cto.com/14472348/2476476

java多态实现动物叫唤_Java多态实现相关推荐

  1. java多态实现动物叫唤_Java 多态 ——一个案例 彻底搞懂它

    最近,发现基础真的很重要.比如,Java中多态的特性,在学习中就是很难懂,比较抽象的概念.学的时候就犯糊涂,但日后会发现,基础在日常工作的理解中占有重要的角色. 下面,我将用一个代码实例,回忆和巩固多 ...

  2. java多态的应用场景_Java多态总结

    写在前面 由于找工作的原因,最近几个月都没有更新博客了...这篇可能是今年最后一篇总结类的博文了,希望能够写的好点吧 _ 至此,博客中java基础方面的内容零零散散地也逐渐总结完了,基本上面试经常问到 ...

  3. java 父类引用子类对象_java多态,如何理解父类引用指向子类对象

    java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是"向上转型". 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   C ...

  4. java的多态是什么意思_java多态是什么意思?实例分享

    相信很多学习java的人对于java多态是非常了解的,它的知识点也是非常重要的.今天就来为大家介绍一下,java多态是什么意思?并且用实例分享出来,一起来了解一下吧. 首先,多态指同一个实体同时具有多 ...

  5. java 多态判断非空_Java 多态

    父类的属性变量(例如变量 int a)可以被继承,同时在子类中也会同时继承该变量(super.int a,继承的变量),子类中也可以再次声明一个同名(可以同类型)的变量(double a,自己声明的同 ...

  6. java使用多态打印个人信息_java 多态 回顾

    写了有段时间java了,回头看看最基础的继承问题,挺有意思,把之前不懂的理顺了 public class App9 { public String show(D obj) { return " ...

  7. java计算面积的方法_JAVA多态计算面积main函数调用方法

    public static void main(String[] args) { Shape shape; Scanner input = new Scanner(System.in); System ...

  8. java 向下转型运行时错误_java多态和向下转型问题。

    Q1:运行结果中dog2和dog3的引用都指向Dog,且引用地址都一样,但是为什么dog2为什么就不能用eat(i)方法呢?Q2:为什么运行结果都是true?Q3:我开始是Animalsdog2=ne ...

  9. java多态 求形状面积_JAVA多态计算面积main函数调用方法

    public static void main(String[] args) { Shape shape; Scanner input = new Scanner(System.in); System ...

最新文章

  1. 深挖BAT内部级别和薪资待遇
  2. 【数据结构】数组和广义表
  3. Cube 技术解读 | 支付宝新一代动态化技术架构与选型综述
  4. mysql varchar java_关于MySQL varchar类型最大值,原来一直都理解错了
  5. malloc/free 和 new/delete的联系和区别
  6. 线性代数:线性方程组的解
  7. 机器学习-贝叶斯网络
  8. linux之cp强制复制文件
  9. 两个框架之间的数据类型转换,需要桥接技术
  10. python数字合并提高_python-给定相关数字列表,合并相关列表以创...
  11. Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:2.3.0.RELEAS错误解决
  12. prolog与python_讲解:SENG201、Software、Python,Java/c++Web|Prolog
  13. 罗永浩曾想自杀,戴威债务缠身仍不认输......这是无数创业者的生存现状
  14. Kademlia详解 (转贴NeoRagex2002)
  15. 对虎牙直播进行爬取,并对信息进行处理分析
  16. 手机到底应该选128G还是64G内存呢?其实很多人都选错了
  17. 《 编程导论——以Python为舟》学习笔记(一)
  18. 成品直播源码推荐,登录界面实现插入背景
  19. adapt和adopt的区别_如何一句话分清adapt ,adopt 和adept
  20. 程序设计思维 B - 猫猫向前冲(拓扑排序、Kahn算法)

热门文章

  1. Android之adb删除应用
  2. 血泪是雨涨了寂寞的湖,疼痛是我思念你的心
  3. (附源码)SSM学习和分享做菜web系统JAVA计算机毕业设计项目
  4. 100G光模块有什么优势
  5. rk3128有多少个bank_rk3128网络机顶盒一些测试结果
  6. format()方法的格式控制
  7. 优化RIL驱动,巧解WinCE电话漏接难题
  8. 如何用 Vue 实现前端权限控制
  9. 图像处理深度学习模型训练速度的硬件影响因素
  10. 在Foxmail中添加阿里云企业邮箱账号