例如,如果我的超类有这个方法:
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();
}
答案 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