如果在子进程中重写其中一个方法,父类如何运行?

时间:2012-05-06 23:51:19

标签: java inheritance

当子类重写多个方法并在其父类中调用方法时,父类是否使用它自己的预定义方法,或者子项已覆盖的方法?

对于某些背景和一个例子,我的问题源于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(); 打印的内容是什么?

  1. fido.act()
  2. run eat
  3. run eat sleep
  4. run eat sleep bark
  5. 由于无限递归而无法打印任何内容。

2 个答案:

答案 0 :(得分:3)

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

  • 将超类中定义的方法称为自己的方法,或
  • 调用超类中定义的方法,特别是请求超类的行为

第一种方法的语法如下:

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

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

super.act();

我认为现在你有足够的信息来跟踪你的例子中没有进一步帮助的情况。

答案 1 :(得分:0)

每当调用一个方法时 - 无论是在类的层次结构中定义还是在其他一些不相关的类中定义 - 多态性都会启动。搜索目标方法是从实例的实际类开始并向上移动继承层次结构。

绕过它的唯一时间是从使用super覆盖它的方法调用重写方法时。