网站首页 > java教程 正文
Java、计算机、编程、程序员
吐槽
面试官:Java的向上转型和向下转型解释下
程序汪:我知道怎么用,不知道为啥哦
面试官:你可以回家等消息了
程序汪:凉凉的感觉
基础准备
- 动态绑定
- 继承
- 接口
- 强制转换
- 父类引用指向子类实现
继承
Java里继承是代码复用的机制,子类继承了父类的非私有属性和方法,然后子类又可以继续扩展自己的属性及方法。
向上转型(自动)
子类对象转为父类,父类可以是接口。公式:Father f = new Son();Father是父类或接口,son是子类。
通俗讲:儿子升级变老子了,就只能用老子的方法了,儿子的方法就不能调用了,你要调用JVM老大会报错给你看,哈哈哈
老子就一个,儿子可以有很多。
向下转型(强制)
强制转换 必须 (类型)父类
父类对象转为子类。公式:Son s = (Son)f;
向下转型需要考虑安全性,如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误即能否向下转型,只有先经过向上转型的对象才能继续向下转型。
通俗讲:老子如果想变儿子,需要用instanceof安全验证下,不然有可能异常(不是亲生的就惨了)ClassCastException,注意只有儿子升级到老子,然后老子才能降级到儿子。
HashMap源码的向下转型
String源码里的向下转型
SpringMVC源码(向上转型)
向下转型经典代码
方法入参是 接口ApplicationContext,具体初始化类在不用的init方法中
org.springframework.web.servlet.DispatcherServlet
如果不用接口,直接用子类入参,这个代码会有多臃肿啊,那画面不敢想啊。
SpringMVC源码的向下转型
吐槽
java干嘛搞个向上向下转型,这么麻烦直接Son s = new Son()不是很爽嘛,
这就是复杂业务代码没遇到过才这么问
总结
- 向上转型的作用,减少重复代码,父类为参数,调有时用子类作为参数,就是利用了向上转型。这样使代码变得简洁。体现了JAVA的抽象编程思想
- 框架代码中骨架代码都是靠向上向下转型来让代码复用达到极致;
猜你喜欢
- 2024-10-11 SpringBoot整合Nacos配置中心加载原理二
- 2024-10-11 Java核心修饰符——abstract修饰符与抽象类、抽象方法
- 2024-10-11 绝对的JAVA面试干货(java juc 面试)
- 2024-10-11 Java面试集合(三)-1(基础篇java集合面试专用)
- 2024-10-11 Java之路-10 API、Scanner类、Random类、Math类
- 2024-10-11 JAVA面试基础知识点(java面试必背)
- 2024-10-11 java面试题及答案2022,java2022最新面试题及答案
- 2024-10-11 java向上转型和向下转型(java向上转型调用的是子类还是父类属性)
- 2024-10-11 「Java基础11」常用API(java基础知识点整理汇总)
- 2024-10-11 java基础总结(java基础总结心得)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)