class One {
public void doThing(One o) {System.out.println("One");}
}
class Two extends One{
public void doThing(Two t) {System.out.println("Two");}
}
public class Ugly {
public static void main(String[] args) {
Two t = new Two();
One o = t;
o.doThing(new Two());
}
}
结果:一
class One {
public void doThing(One o) {System.out.println("One");}
}
class Two extends One{
public void doThing(Two t) {System.out.println("Two");}
}
public class Ugly {
public static void main(String[] args) {
Two t = new Two();
One o = t;
t.doThing(new Two());
}
}
结果:两个
我知道在运行时,即使对象引用是超类类型,实际的对象类型也将是已知的,并且将调用实际对象的方法。但如果是这种情况,那么在运行时doThing(Two t)
应该调用该方法,而是调用超类方法doThing(One o)
。如果有人解释我会很高兴
在第二段代码中,它打印“Two”。
问题:当从超类引用调用时,它正在调用doThing(One o)
当从子类引用调用时,它正在调用doThing(Two o)
注意: 我知道我是超载而不是骑马。为了更清楚,我编辑了我的问题。