子クラスが複数のメソッドをオーバーライドしてその親クラスのメソッドを呼び出す場合、親クラスはそれ自身の事前定義されたメソッドを使用するか、またはその子がオーバーライドしたメソッドを使用しますか?子クラスでメソッドの1つがオーバーライドされた場合、親クラスはどのように機能しますか?
私の質問は、APコンピュータサイエンスカリキュラムのこの質問に由来しています。以下、super.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
- 何が原因無限再帰に印刷されません。
試してみるとどうなりますか? –