JAVA的多态

// 引用的多态
Animal an1 = new Animal();
Animal an2 = new Dog();// 父类的引用指向子类的对象

/**
 * 报错:Type mismatch: cannot convert from Animal to Dog
 * 原因:子类的引用不能指向父类
 * Dog dog = new Animal(); 
 */ 
        
an1.eat();
an2.eat();

Dog dog = new Dog();
Animal an = dog;// 自动类型提升 向上类型转换
/**
 * 报错:Type mismatch: cannot convert from Animal to Dog
 * 原因:这里是向下类型转换,不能自动转换,需要进行强制转换
 * Dog dog2 = an;
 */
        
/**
 * 注意:编译时,根据an的地址检测到,an所在区域原本就是Dog类型,所以可以转换
 * Dog dog2 = (Dog)an;
 */
Dog dog2 = (Dog)an;// 向下类型转换 强制类型转换
        
/**
 * 报错: Exception in thread "main" java.lang.ClassCastException: com.jiang.Dog 
 * cannot be cast to com.jiang.Cat at com.jiang.Initail.main(Initail.java:20) 
 * Cat cat = (Cat)an;// 工具虽然不报错,但是编译运行的时候会抛错
 */
 
        
if(an instanceof Cat){
  Cat cat = (Cat)an;
}else{
  System.out.print("Cat和an无法进行类型转换");
}
if(an instanceof Dog){
  Dog dog3 = (Dog)an;
}else{
  System.out.print("Dog和an无法进行类型转换");
}

运行结果:


运行结果
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 姓名: 李小娜 [嵌牛导读]: 运行时多态性是面向对象程序设计代码重用的一个最强大机制,动态性的概念也可以被说成“...
    n184阅读 3,652评论 0 0
  • 多态 概述:某一个事物,在不同时刻表现出来的不同状态。我们来举例说明: 猫是猫,狗是狗,猫和狗都是动物。 水在不同...
    清风沐沐阅读 3,558评论 0 0
  • 多态:对象的多种形态 1、引用多态 父类的引用可以指向本类的对象父类的引用可以指向子类的对象 2、方法多态 创建本...
    少冰三hun甜阅读 4,300评论 0 0
  • 面向对象的三种特性封装,继承和多态。封装是为了保护数据和代码重用,继承在一定程度上也是为了代码重用,另外一方面继承...
    0x70e8阅读 3,280评论 1 0
  • 那么什么是多态呢? 首先我们要知道多态性的三个必要满足的条件: 1.有继承(或实现接口) 2.有方法的重写 3.有...
    多彩海洋阅读 2,854评论 2 1

友情链接更多精彩内容