子クラスが複数のメソッドをオーバーライドし、その親クラスのメソッドを呼び出す場合、親クラスは独自の定義済みメソッドを使用しますか?それとも子クラスがオーバーライドしたメソッドを使用しますか?
いくつかのコンテキストと例として、私の質問は AP コンピューター サイエンス カリキュラムのこの質問に由来しています。以下、super.act()
が呼び出されると、 のact
メソッドが をDog
呼び出しますeat()
。その呼び出しは または のメソッドにeat
行きますか?eat
Dog
UnderDdog
次の 2 つのクラスを考えてみましょう。
public class Dog
{
public void act() {
System.out.print("run");
eat();
}
public void eat() {
System.out.print("eat");
}
}
public class UnderDog extends Dog
{
public void act() {
super.act();
System.out.print("sleep");
}
public void eat() {
super.eat();
System.out.print("bark");
}
}
次の宣言がクライアント プログラムにあるとします。
Dog fido = new UnderDog();
呼び出しの結果として何が出力されますfido.act()
か?
run eat
run eat sleep
run eat sleep bark
run eat bark sleep
- 無限再帰のため、何も出力されません。