验证子类重写是否生效,关键在于用父类引用调用方法(如animal a = new horse(); a.eat()),观察运行时输出是否为子类实现;需确保方法签名完全一致、加@override注解、排除private/static/final/包私有等不可重写情况,并测试super调用是否正确执行父类逻辑。

测试子类重写逻辑,关键不是“能不能编译过去”,而是验证运行时是否真正调用了子类的实现——也就是确认多态是否生效、重写是否按预期工作。
用父类引用指向子类对象来触发多态
这是最核心的测试方式。只有通过父类类型引用调用方法,才能检验 JVM 是否在运行时选择子类重写后的方法。
- 写法示例:
Animal a = new Horse(); a.eat(); - 如果输出是
Horse is eating.,说明重写成功;若输出Animal is eating.,说明没重写或重写有误 - 注意:不能写
Horse h = new Horse(); h.eat();——这属于静态绑定,即使没重写也能运行,无法验证多态效果
检查方法签名是否完全一致
重写失败常因签名不匹配,编译器不会报错但实际不生效(变成子类独立方法)。需逐项核对:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 方法名拼写完全相同(区分大小写)
- 参数个数、类型、顺序严格一致
- 返回值类型:基本类型或
void必须相同;引用类型可协变(如父类返回Animal,子类可返回Dog) - 务必加上
@Override注解——编译器会立刻指出签名不符的问题
验证访问权限与特殊方法限制
有些方法看似写了,实则根本不算重写。测试时要主动排除这些“伪重写”:
-
private方法:子类中同名方法只是新定义,与父类无关;可通过反射或日志确认调用链 -
static方法:属于类,不参与多态;Animal a = new Horse(); a.staticMethod()调用的是Animal的版本 -
final方法:编译直接报错,无法重写 - 包私有方法(默认权限):若子类不在同一包,也无法继承和重写
结合构造过程与super调用做行为对比
重写后常需保留父类逻辑,再扩展。测试应覆盖super调用场景:
- 在子类重写方法中加入
super.xxx(),观察输出是否包含父类行为 - 例如:
public void say() { super.say(); System.out.println("年级:" + grade); } - 运行时看两段输出是否都出现,确认
super确实调到了父类原方法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










