
Java多态之向下转型
发布日期:2021-05-09 06:57:33
浏览次数:18
分类:博客文章
本文共 1136 字,大约阅读时间需要 3 分钟。
目录
Java多态之向下转型
往期回顾:我们学习了向上转型和动态绑定的概念,可以知道在继承关系中,将一个子类对象赋值给父类的引用变量,调用父类的方法,在实际运行时,就可以根据子类中重写的方法执行不同的操作。其中有一个弊端,就是在向上转型的过程中,其实丢失了一部分子类特有的功能,毕竟它只允许调用父类中的方法。那么,如何在这时调用子类中的方法呢,这时就需要与向上转型相对应的方法,就是所谓的:向下转型。
向上转型是自动就能完成的,向下转型则需要强制类型转换。
强制类型转换
我们前面提到过基本数据类型的强制转换,可以查看之前的文章:
引用变量的强制类型转换与基本数据类型类似,都需要用到类型转换运算符:()
。 //将变量强制转换为type类型type p = (type)变量
特别注意:
- 基本数据类型中,数值类型和布尔类型无法进行类型转换。
//错误!boolean boo = true;int in = (int)boo;
- 不在继承关系中的两个类型无法进行强制类型转换。
//假设Person类和Dog类不具有继承关系,则下面会出错Person p = new Person();Dog dog = (Dog)p;
- 就算在继承关系中,也不能把父类的实例转换成子类类型。(也就是说,引用变量必须编译时是父类类型,运行时是子类类型才可以)注意,编译时是不会报错的,只有运行时才会报错。
//假设Student继承于Person类//编译时正常,运行时出错Person p = new Person();Student s = (Student)p;
instanceof
将一个父类引用赋给一个子类变量时,必须经过强制类型转换。如果出现强制类型转换双方不匹配的话,运行时通过(RTTI Run-Time Type Identification)
,即运行时类型识别,检查并返回ClassCastException
,即类型转换异常。
为了避免这一尴尬的问题发生,我们可以用instanceof
运算符来检查,确保程序的健壮性。
instance
是实例的意思,可想而知,instanceof
表示判断前面的对象是否是后面的类,或者子类,实现类的实例。如果是就返回true,否则就false。 [引用类型变量] instanceof [类(接口)]
从上面诸多错误例子中随便举一个:
//在强制类型转换前加上instanceof语句判断Person p = new Person();if (p instanceof Student) {Student s = ((Student) p);}
这时,if判断语句中为false,里面自然无法执行,也就避免程序报错,保证了程序的健壮性。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年05月13日 09时55分47秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
JAVA- 清除数组重复元素
2025-04-01
Java---多线程之死锁
2025-04-01
Java---多线程(工作内存)和内存模型(主内存)分析
2025-04-01
Java---设计模式app小软件汇总应用
2025-04-01
java--Serializable理解与总结
2025-04-01
java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present---springcloud工作笔记166
2025-04-01
Java-JUC(五):闭锁(CountDownLatch)
2025-04-01
Java-JVM 类的初始化
2025-04-01
Java-rmi-registry反序列化漏洞复现
2025-04-01
java-se题目
2025-04-01
Java-slf4j:sfl4j
2025-04-01
JAVA-Socket通信笔记
2025-04-01
JAVA-【1】配置
2025-04-01
java-信息安全(九)-基于DH,非对称加密,对称加密等理解HTTPS
2025-04-01
java-初读 HashTable
2025-04-01
Java-压缩还能这么优化~喜大普奔
2025-04-01