当子类重写多个方法并调用父类中的方法时,父类是使用自己预定义的方法,还是子类重写的方法?
对于某些上下文和示例,我的问题源于 AP 计算机科学类(class)中的这个问题。下面,当 super.act()
被调用时,Dog
的 act
方法调用 eat()
。 eat
调用会转到 Dog
或 UnderDdog
中的 eat
方法吗?
考虑以下两个类。
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 sleep bark
run eat bark sleep
- 由于无限递归,没有打印任何内容。
最佳答案
子类可以通过两种方式调用父类的方法:
- 调用父类(super class)中定义的方法作为自己的方法,或者
- 调用父类(super class)中定义的方法,专门请求父类(super class)的行为
第一种方式的语法如下:
act(); // it's the same as this.act()
第二种调用方式的语法如下:
super.act();
我认为现在您有足够的信息来跟踪您的示例中发生的情况,而无需进一步的帮助。
关于java - 当其中一个方法在子类中被覆盖时,父类如何运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10475282/