現在、私はJAVAプログラミング言語を学んでいます。JAVAプログラムの出力[多型、メソッドのオーバーライド]
class Base{
void g(){
System.out.print("g-Base ");
}
void f(){
System.out.print("f-Base ");
g();
}
}
class Derived extends Base{
public static void main(String[] args) {
Base b = new Derived(); b.f();
}
void g() {
System.out.print("g-Derived ");
}
void f() {
System.out.print("f-Derived "); super.f();
}
}
質問は次のとおりです:このプログラムの出力が何であるかを私の講師のメモでは、私は次のコードスニペットを見つけました。 f-Derived f-Base g-Derived 私はf-Derivedとf-Baseの部分を理解していますが、なぜ最後のステップで "g-Derived"を印刷したのですか? "g-Base"であった。
'' 'Base b = new Derived();と同じです。 b.g(); '' 'g-Derived''を表示します。 –
はい、コードがsuper.f()にジャンプしてそこからg()を呼び出すと、スーパーからg()を呼び出す必要はありませんか? – SalysBruoga
いいえ、 '' 'this''すなわち' '' this.g() '' 'の動的呼び出し(実行時に起こります)です。 '' 'this''は動的型' 'Derived''を持っているので、' 'Derived :: g'''が呼び出されます。 –