为什么必须在任何子类方法的代码之前调用超类的方法版本?

时间:2015-08-06 14:50:37

标签: java inheritance

我要求出于好奇而不是必要。我想答案就像是“因为这就是Java的构建方式”。我想知道为什么选择这种方式。

例如,如果我的超类有这个方法:

public void foo()
{
   System.out.println("We're in the superclass.");
}

子类重写方法:

@Override
public void foo()
{
   super.foo();
   System.out.println("We're in the subclass.");
}

为什么super.foo()需要位于子类方法的顶部(如果要使用它)?为什么我不能交换这两行来使它看起来像这样:

@Override
public void foo()
{
   System.out.println("We're in the subclass.");
   super.foo();
}

1 个答案:

答案 0 :(得分:7)

它没有。它适用于构造函数,但对于普通方法,您可以随时调用它。如果你不想,你甚至不必打电话,或者你可以完全调用不同的父类方法。

从你的例子:

public static void main(String[] args) {
    new B().foo();
}

static class A {
    public void foo() {
        System.out.println("In A");
    }
}

static class B extends A {
    public void foo() {
        System.out.println("In B");
        super.foo();
    }
}

输出

In B
In A