| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- package course.polymorphism;
- /**
- * @author WanJl
- * @version 1.0
- * @title Demo02
- * @description 向下转型(向下造型)
- * @create 2026/7/24
- */
- public class Demo02 {
- /*
- 多态中的转型
- 向上造型
- 父类的引用指向子类的对象
- 向下造型
- 子类的引用指向父类的对象
- 格式: 子类类型 对象名=(子类类型)父类的引用名;
- 向下造型的前提一定是向上造型。
- 1、先要执行向上造型 : 父类类型 对象名=new 子类类型();
- 2、再执行向下造型 : 子类类型 子类对象名=父类对象名;
- 前提:Student extends Person
- Person p=new Student();
- Student s=(Student)p;
- 什么时候要使用向下造型呢?
- 需要使用子类对象特有的方法。
- 比如父类:外卖类
- 子类:麻辣烫类 、手撕烤鸭类、汉堡类
- 有这样一个方法:
- public void 点外卖(外卖类 wm){
- //需要判断 什么样的外卖,执行什么样的操作
- //这时候就需要判断外卖类的对象名 wm到底指向的手撕烤鸭对象还是麻辣烫对象
- //并且需要进行向下转型 把外卖类转换为手撕烤鸭或麻辣烫
- //这时候就需要有一个运算符 来判断 这个 wm 对象 到底是 手撕烤鸭类,还是 麻辣烫类
- //使用 instanceof 运算符进行判断
- // 格式: 对象名 instanceof 类型
- // 通俗的理解: 判断 关键字 左边的变量,是否是属于 右边的类型,返回的是boolean类型结果
- // 运算结果 是一个布尔值
- if (wm instanceof 手撕烤鸭类){
- // 比如 转型为手撕烤鸭类:
- 手撕烤鸭类 ssky=(手撕烤鸭类)wm;
- //调用手撕烤鸭类的特有方法
- ssky.准备塑料手套();
- }else if(wm instanceof 麻辣烫){
- // 比如 转型为麻辣烫类:
- 麻辣烫类 mlt=(麻辣烫类)wm;
- mlt.准备筷子();
- }
- }
- */
- }
|