向上转型自动安全,向下转型需显式强制转换且须类型匹配,否则抛classcastexception;两者均要求存在继承或实现关系,转型仅改变引用类型,对象运行时类型不变。

向上转型是自动的、安全的,向下转型必须显式强制转换,且需确保实际对象类型匹配,否则运行时抛 ClassCastException。
向上转型的操作规则
向上转型本质是“用父类引用看待子类对象”,编译器允许且不报错。
- 语法形式为:
父类类型 变量名 = new 子类类型();或父类类型 变量名 = 子类对象; - 无需任何强制转换符号,Java 自动完成
- 转型后只能访问父类中声明的方法和字段(包括被子类重写的方法)
- 子类独有的方法、字段不可见,编译直接报错
- 方法调用遵循动态绑定:运行时执行子类重写后的版本
向下转型的操作规则
向下转型是“把父类引用还原回子类身份”,有风险,必须谨慎操作。
- 语法形式为:
子类类型 变量名 = (子类类型) 父类引用; - 必须显式写出括号和目标子类类型,否则编译不通过
- 仅当该父类引用实际指向的是对应子类(或其子类)实例时,才安全
- 若实际类型不符(如父类对象本身),运行时抛出
ClassCastException - 推荐先用
instanceof判断,再转型,避免异常
安全转型的常用写法
从 Java 14 起支持模式匹配语法,让判断+转型更简洁。
- 传统写法:
if (obj instanceof Dog) { Dog d = (Dog) obj; d.bark(); } - Java 14+ 写法:
if (obj instanceof Dog d) { d.bark(); }—— 一次完成判断与赋值 - 即使使用旧版本,也应避免无条件强转,尤其在集合遍历、回调参数等场景
转型背后的类型关系前提
两种转型都要求两个类存在继承或实现关系(父子类、类与接口)。
- 没有继承/实现关系的类型之间无法转型,编译直接失败
- 接口与其实现类之间同样适用向上/向下转型规则
- 转型只影响引用变量的编译时类型,对象本身的运行时类型始终不变
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











