接上一篇:https://blog.csdn.net/green703338130/article/details/81028819

对象的向上转型

对象的向上转型,就是多态的写法。
格式:
父类名称 对象名 = new 子类对象名称(); Animal animal = new Cat();
含义:
右侧创建一个子类对象,把它当做父类来看。
注意事项
向上转型一定是安全的,从小范围转换成为大范围。
类似于:double num = 100;int --> double,自动类型转换。

抽象类

public abstract class Animal {public  abstract void eat();
}

子类

public class Cat extends  Animal {@Overridepublic void eat() {System.out.println("猫吃鱼");}
}

主方法

public class Demo01Main {public static void main(String[] args) {//对象的向上转型,就是:父类对象引用指向子类对象。Animal animal = new Cat();animal.eat();}
}

结果:
猫吃鱼

对象向下转型

向上转型的弊端

虽然向上转型是安全的,但是对象一旦向上转型,那么就无法调用子类原本的特有的方法属性,为此这里引入向下转型转型来还原。
格式:
子类名称 对象名 = (子类名称) 父类对象;
含义:将父类对象(还原)成为本来的子类对象。
Animal animal = new Cat(); //本来就是猫,向上转型成为动物。
Cat cat = (Cat)animal; //本来就是猫,已经被转型为动物。还原回来成为本来的猫。
注意事项:
- 必须保证对象本来创建的时候,就是猫,才能向下转型成为猫。
- 如果对象创建的时候本来不是猫。现在非要向下转型成为猫,就会报错。

Animal.java

public abstract class Animal {public  abstract void eat();
}

Cat.java

public class Cat extends  Animal {int a = 10;@Overridepublic void eat() {System.out.println("猫吃鱼");}public void catchMouse() {System.out.println("猫抓老鼠");}
}

Dog.java

public class Dog extends  Animal{@Overridepublic void eat() {System.out.println("狗吃骨头");}public void watchHouse() {System.out.println("狗看家");}
}

主方法Demo01Main.java

public class Demo01Main {public static void main(String[] args) {//对象的向上转型,就是:父类对象引用指向子类对象。Animal animal1 = new Cat();//本来创建的时候是一只猫animal1.eat();//animal1.a;//错误,父类无法访问子类的成员变量
//        animal1.catMouse();//错误,父类无法访问子类方法//向下转型,进行还原动作Cat cat = (Cat) animal1;cat.catchMouse();System.out.println("----------我是分割线--------");/*下面是错误的向下转型本来new的时候是一只猫,然后向下转型成为狗*/Animal animal2 = new Cat();//原本是一只猫Dog dog = (Dog)animal2;//编译不会报错,但是运行的时候报错:java.lang.ClassCastException,类转换异常。}
}

结果:
猫吃鱼
猫抓老鼠
----------我是分割线--------

instanceof在向下转型中的应用

在向下转型时,不知道父类引用的是什么类型的子类,就会发生错误,这时可以使用instanceof来解决这个问题。
格式:
对象 instaceof 类名称
这将会返回一个boolean值结果,也就是判断前面的对象能不能当做后面类型的实例

public class Demo01Instanceof {public static void main(String[] args) {Animal animal = new Cat();animal.eat();//如果希望调用子类的特有方法,需要向下转型。//判断父类引用animal是不是Dogif(animal instanceof Dog) {Dog dog = (Dog) animal;dog.watchHouse();}//判断父类引用animal是不是Catif(animal instanceof  Cat) {Cat cat = (Cat)animal;cat.catchMouse();}}
}

对象的向上转型和向下转型相关推荐

  1. 1.5 对象类型转换:向上转型和向下转型

    将一个类型强制转换成另一个类型的过程被称为类型转换.本节所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象.当对不存在继承关系的对象进行强制类型转换时,会抛出 Java 强制类型转换(ja ...

  2. Day11多态部分-6 【1.3 对象的向上转型和向下转型】

    [1.3 对象的向上转型和向下转型] + - 向上转型 子类对象赋值给父类类型的引用时 会自动将子类对象对应的类型 提升为父类类型 语法: 父类类型 引用 = new 子类的构造方法(); 特点: 此 ...

  3. java 对象向上转型_JAVA对象向上转型和向下转型

    今天做了一个测试的题目,发现自己还是很多问题没有静下心来做.很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了.所以这个要自己应以为鉴! 对象的转型问题其实并不复杂,我们记住一句话 ...

  4. 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货

    –本文摘要–     1.本文的目标读者:是了解Java基础,且对面向对象概念有所了解,但是对Java中继承.抽象类.接口.多态等等概念搞不清的初学者.     2.本文的内容摘要:讲述Java中的一 ...

  5. 重新精读《Java 编程思想》系列之向上转型与向下转型

    前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型.在此分享给大家. 向上转型 向上转型是用来表现新类和基类之间的关系.在传统中,由导出类转型成基类,在继承图中 ...

  6. 第三次学JAVA再学不好就吃翔(part35)--多态向上转型和向下转型

    学习笔记,仅供参考 文章目录 面向对象 多态 多态向上转型和向下转型 多态的好处和弊端 面向对象 多态 多态向上转型和向下转型 我们首先通过以下代码复习一下自动类型提升和强制类型转换: class B ...

  7. java 向上转型_java向上转型和向下转型

    转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展. 向上转型:子类引用的对象 ...

  8. Java转型(向上转型和向下转型)

    在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就 ...

  9. 【JAVA】关于向上转型与向下转型

    向上转型: 子类引用的对象转换为父类类型称为向上转型.通俗地说就是是将子类对象转为父类对象.此处父类对象可以是接口 如果子类重写了父类的方法,就根据这个引用指向调用子类重写的这个方法,不是调用父类的, ...

  10. 【转】面向对象之多态(向上转型与向下转型)

    转:https://blog.csdn.net/qq_31655965/article/details/54746235. 多态,大概每个人都知道.但是,又有几个人真的理解什么是多态.多态有哪些细节呢 ...

最新文章

  1. 距离高效率学习CV算法我还有多远的距离?
  2. 为什么要选择html5,5分钟告诉你,为什么要学HTML5大前端
  3. python编程入门经典实例-Python编程语言入门经典案例
  4. ListElement QML类型
  5. java中多条件与不定条件查询
  6. 苹果Iphone/Ipad--L2T虚拟教程
  7. ubuntu下mysql-python模块的安装
  8. flutter usb串口_Flutter 调试方式
  9. 国内maven仓库地址资源汇总
  10. android tf卡 修复工具,闪迪sd卡修复工具(sd卡修复工具安卓版)
  11. python+django+mysql多用户B2C商城系统毕业设计毕设开题报告
  12. smail if-eqz理解
  13. 登录页面加密token和盐的作用
  14. linux串口无线透传,一种无线串口透传系统的制作方法
  15. 智能快递柜无线组网工业路由器
  16. 坑爹的苹果机不执行ajax请求,苹果机加载外部Jquery失败
  17. 十个经典的Android开源项目
  18. 不要虚掷你的黄金时代,不要去倾听枯燥乏味的东西,不要设法挽留无望的失败,不要把你的生命献给无知、平庸和低俗。
  19. 乱发短信的脉脉终于败诉了,网友:早就该判刑了
  20. ALCOA+CCEA原则(数据完整性标准)

热门文章

  1. 虚拟机系列之-ubuntu系统克隆相同ip调整办法
  2. 教你用matlab低版本打开版本simulink文件
  3. 基础算法 - 树的直径
  4. spring cloud: TX-LCN解决分布式事务
  5. SQL 增加或删除一列
  6. Java培训出来什么水平?
  7. Maple学习笔记——编程
  8. (转) maven 依赖com.google.code.kaptcha
  9. 【论文阅读】Misshapen Pelvis Landmark Detection WithLocal-Global Feature Learning for DiagnosingDevelop
  10. 解决ChatGPT网络总是掉线问题