对象的向上转型和向下转型
接上一篇: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.5 对象类型转换:向上转型和向下转型
将一个类型强制转换成另一个类型的过程被称为类型转换.本节所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象.当对不存在继承关系的对象进行强制类型转换时,会抛出 Java 强制类型转换(ja ...
- Day11多态部分-6 【1.3 对象的向上转型和向下转型】
[1.3 对象的向上转型和向下转型] + - 向上转型 子类对象赋值给父类类型的引用时 会自动将子类对象对应的类型 提升为父类类型 语法: 父类类型 引用 = new 子类的构造方法(); 特点: 此 ...
- java 对象向上转型_JAVA对象向上转型和向下转型
今天做了一个测试的题目,发现自己还是很多问题没有静下心来做.很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了.所以这个要自己应以为鉴! 对象的转型问题其实并不复杂,我们记住一句话 ...
- 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货
–本文摘要– 1.本文的目标读者:是了解Java基础,且对面向对象概念有所了解,但是对Java中继承.抽象类.接口.多态等等概念搞不清的初学者. 2.本文的内容摘要:讲述Java中的一 ...
- 重新精读《Java 编程思想》系列之向上转型与向下转型
前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型.在此分享给大家. 向上转型 向上转型是用来表现新类和基类之间的关系.在传统中,由导出类转型成基类,在继承图中 ...
- 第三次学JAVA再学不好就吃翔(part35)--多态向上转型和向下转型
学习笔记,仅供参考 文章目录 面向对象 多态 多态向上转型和向下转型 多态的好处和弊端 面向对象 多态 多态向上转型和向下转型 我们首先通过以下代码复习一下自动类型提升和强制类型转换: class B ...
- java 向上转型_java向上转型和向下转型
转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展. 向上转型:子类引用的对象 ...
- Java转型(向上转型和向下转型)
在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就 ...
- 【JAVA】关于向上转型与向下转型
向上转型: 子类引用的对象转换为父类类型称为向上转型.通俗地说就是是将子类对象转为父类对象.此处父类对象可以是接口 如果子类重写了父类的方法,就根据这个引用指向调用子类重写的这个方法,不是调用父类的, ...
- 【转】面向对象之多态(向上转型与向下转型)
转:https://blog.csdn.net/qq_31655965/article/details/54746235. 多态,大概每个人都知道.但是,又有几个人真的理解什么是多态.多态有哪些细节呢 ...
最新文章
- 距离高效率学习CV算法我还有多远的距离?
- 为什么要选择html5,5分钟告诉你,为什么要学HTML5大前端
- python编程入门经典实例-Python编程语言入门经典案例
- ListElement QML类型
- java中多条件与不定条件查询
- 苹果Iphone/Ipad--L2T虚拟教程
- ubuntu下mysql-python模块的安装
- flutter usb串口_Flutter 调试方式
- 国内maven仓库地址资源汇总
- android tf卡 修复工具,闪迪sd卡修复工具(sd卡修复工具安卓版)
- python+django+mysql多用户B2C商城系统毕业设计毕设开题报告
- smail if-eqz理解
- 登录页面加密token和盐的作用
- linux串口无线透传,一种无线串口透传系统的制作方法
- 智能快递柜无线组网工业路由器
- 坑爹的苹果机不执行ajax请求,苹果机加载外部Jquery失败
- 十个经典的Android开源项目
- 不要虚掷你的黄金时代,不要去倾听枯燥乏味的东西,不要设法挽留无望的失败,不要把你的生命献给无知、平庸和低俗。
- 乱发短信的脉脉终于败诉了,网友:早就该判刑了
- ALCOA+CCEA原则(数据完整性标准)
热门文章
- 虚拟机系列之-ubuntu系统克隆相同ip调整办法
- 教你用matlab低版本打开版本simulink文件
- 基础算法 - 树的直径
- spring cloud: TX-LCN解决分布式事务
- SQL 增加或删除一列
- Java培训出来什么水平?
- Maple学习笔记——编程
- (转) maven 依赖com.google.code.kaptcha
- 【论文阅读】Misshapen Pelvis Landmark Detection WithLocal-Global Feature Learning for DiagnosingDevelop
- 解决ChatGPT网络总是掉线问题