興味深いシナリオがあります。
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() メソッドではなく、基本クラスの say() メソッドが呼び出されることを期待していました。
このロジックの背後にある理由は何ですか?