子クラスが複数のメソッドをオーバーライドし、その親クラスのメソッドを呼び出す場合、親クラスは独自の定義済みメソッドを使用しますか?それとも子クラスがオーバーライドしたメソッドを使用しますか?
いくつかのコンテキストと例として、私の質問は AP コンピューター サイエンス カリキュラムのこの質問に由来しています。以下、super.act()が呼び出されると、 のactメソッドが をDog呼び出しますeat()。その呼び出しは または のメソッドにeat行きますか?eatDogUnderDdog
次の 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 eatrun eat sleeprun eat sleep barkrun eat bark sleep- 無限再帰のため、何も出力されません。