当子类重写多个方法并在其父类中调用方法时,父类是否使用它自己的预定义方法,或者子项已覆盖的方法?
对于某些背景和一个例子,我的问题源于AP计算机科学课程中的这个问题。下面,当super.act()
被调用时,来自act
的{{1}}方法会调用Dog
。这个eat()
来电是eat
还是eat
中的Dog
方法吗?
考虑以下两个类。
UnderDdog
假设客户端程序中出现以下声明。
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
答案 0 :(得分:3)
子类可以通过两种方式调用超类方法:
第一种方法的语法如下:
act(); // it's the same as this.act()
第二种调用方式的语法如下:
super.act();
我认为现在你有足够的信息来跟踪你的例子中没有进一步帮助的情况。
答案 1 :(得分:0)
每当调用一个方法时 - 无论是在类的层次结构中定义还是在其他一些不相关的类中定义 - 多态性都会启动。搜索目标方法是从实例的实际类开始并向上移动继承层次结构。
绕过它的唯一时间是从使用super
覆盖它的方法调用重写方法时。