向上转型是将子类对象赋值给父类引用,自动安全无需强制转换;编译时按父类类型检查,运行时调用子类重写方法,但无法访问子类特有成员。

Java 中子类对象转为父类对象是自动的,不需要额外写强制转换代码,这叫向上转型(Upcasting)。
什么是向上转型
子类对象赋值给父类引用变量,编译器允许且安全,因为子类拥有父类的所有属性和方法。这是多态的基础操作。
- 无需强制类型转换符号 (Parent)
- 运行时实际对象仍是子类实例,只是用父类视角访问
- 只能调用父类中声明的方法(子类特有方法不可见)
写法示例
假设父类 Animal,子类 Dog:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
Animal a = new Dog(); // ✅ 合法,自动向上转型 a.speak(); // 调用 Dog 的 speak()(如果重写了) // a.bark(); // ❌ 编译错误:Animal 类没有 bark() 方法
注意事项
- 转型后不能直接访问子类新增的字段或方法
- 若需调用子类特有功能,需向下转型((Dog) a),但必须确保对象确实是该子类实例,否则抛
ClassCastException - 可以用
instanceof提前判断:if (a instanceof Dog) { ((Dog) a).bark(); }
为什么能自动转
因为子类 is-a 父类,符合里氏替换原则。JVM 在运行时仍知道真实类型,所以重写的方法能正确执行——这就是动态绑定。
立即学习“Java免费学习笔记(深入)”;

















