我有一个有趣的场景。
public class Base {
public void hello(){
this.say();
System.out.println("hello-Base");
}
protected void say(){
System.out.println("say-Base");
}
}
public class Derived extends Base {
public Derived(){
super.hello();
}
public static void main(String[] args) {
Derived d = new Derived();
}
public void say(){
System.out.println("say-Derived");
}
}
给出的输出是:
say-Derived
hello-Base
我期待当调用 super.hello() 方法时,调用基类的 say() 方法而不是 Derived 类的 say() 方法。
这种逻辑背后的原因是什么?