Java要求如果在构造函数中调用this()或super(),它必须是第一个语句.为什么?
例如:
public class MyClass {
public MyClass(int x) {}
}
public class MySubClass extends MyClass {
public MySubClass(int a, int b) {
int c = a + b;
super(c); // COMPILE ERROR
}
}
Run Code Online (Sandbox Code Playgroud)
Sun编译器说"调用super必须是构造函数中的第一个语句".Eclipse编译器说"构造函数调用必须是构造函数中的第一个语句".
但是,您可以通过重新安排代码来解决这个问题:
public class MySubClass extends MyClass {
public MySubClass(int a, int b) {
super(a + b); // OK
}
}
Run Code Online (Sandbox Code Playgroud)
这是另一个例子:
public class MyClass {
public MyClass(List list) {}
}
public class MySubClassA extends MyClass {
public MySubClassA(Object item) {
// Create a list …Run Code Online (Sandbox Code Playgroud) 我是出于好奇而不是必然而已.我想答案就像是"因为这就是Java的构建方式".我想知道为什么选择这种方式.
例如,如果我的超类有这个方法:
public void foo()
{
System.out.println("We're in the superclass.");
}
Run Code Online (Sandbox Code Playgroud)
并且子类重写该方法:
@Override
public void foo()
{
super.foo();
System.out.println("We're in the subclass.");
}
Run Code Online (Sandbox Code Playgroud)
为什么需要super.foo()在子类的方法的顶部(如果它将被使用)?为什么我不能交换这两行来使它看起来像这样:
@Override
public void foo()
{
System.out.println("We're in the subclass.");
super.foo();
}
Run Code Online (Sandbox Code Playgroud)