java - 当其中一个方法在子类中被覆盖时,父类如何运行?

标签 java inheritance

当子类重写多个方法并调用父类中的方法时,父类是使用自己预定义的方法,还是子类重写的方法?

对于某些上下文和示例,我的问题源于 AP 计算机科学类(class)中的这个问题。下面,当 super.act() 被调用时,Dogact 方法调用 eat()eat 调用会转到 DogUnderDdog 中的 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() 的结果打印了什么?

  1. 跑吃
  2. 跑吃睡
  3. run eat sleep bark
  4. run eat bark sleep
  5. 由于无限递归,没有打印任何内容。

最佳答案

子类可以通过两种方式调用父类的方法:

  • 调用父类(super class)中定义的方法作为自己的方法,或者
  • 调用父类(super class)中定义的方法,专门请求父类(super class)的行为

第一种方式的语法如下:

act(); // it's the same as this.act()

第二种调用方式的语法如下:

super.act();

我认为现在您有足够的信息来跟踪您的示例中发生的情况,而无需进一步的帮助。

关于java - 当其中一个方法在子类中被覆盖时,父类如何运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10475282/

相关文章:

java - 启用 JMX 代理是否有性能开销?

java - for循环跳过问题

java - 验证 completablefutures 列表的大小

c++ - 将其中一个继承的 protected 成员设为私有(private)

c# - MSTest,当具有测试类继承时,[ClassCleanup] 调用何时发生

java - 根据其自然顺序获取下一个字符串

java - SSLEngine 在解包服务器 hello done 后给出 NEED_UNWRAP

c++ - 多重继承指针比较

c++ - 无法访问派生类中的基本 protected 成员! (在虚函数中)

java - 如何设计一个继承自Rectangle类的Square类