SubClass#foo()不会覆盖,
ParentClass#foo()因为它没有相同的形式参数。一个拿走
Object,另一个拿走
String。因此,运行时的多态不会被应用,并且不会导致子类方法的执行。根据Java语言规范:
如果满足以下所有条件,则在类C中声明或由类C继承的实例方法从类C中 重写 另一个在类A中声明的方法:
mC__m A
A是C的超类。
C不继承。
mA的签名 是的签名的子签名(第8.4.2节)。
mC``mA…
而这部分定义的方法签名:
如果两个方法或构造函数M和N具有相同的名称,相同的类型参数(如果有的话)(第8.4.4节),并且在将N的形式参数类型调整为类型参数之后,则具有
相同的签名。 M,形式参数类型相同。的方法的签名是一个 子签名 的方法的签名,如果任一:
m1__m 2
m2与或具有相同的签名m1的签名与的签名
m1的擦除(第4.6节)相同。m2



