看下面的例子:
class A {
A() { this(1); }
A(int i) { System.out.println("A" ); }
}
class B extends A {
B() {}
B(int i) { System.out.println("B" ); }
}
public class Test
{
public static void main(String[] args) {
A o = new B();
}
}
输出:
A
问题 1:似乎 java 没有为“this(1)”执行后期绑定(bind)。编译时已经确定,请确认。
Q2:Java 不对任何构造函数执行后期绑定(bind)。请确认。
Q3:这是否意味着构造函数是隐式最终的?
最佳答案
您不能覆盖构造函数。他们根本不遵循继承规则。它们不能遵循继承规则,因为您需要一个简单的顺序来构造您的对象。
例如在您的示例中,如果您可以重写 A(int) 构造函数,A() 将调用 B(int),但 B(int) 隐式调用 super(),即 A(),并且您具有无限递归。
构造函数调用可覆盖的方法通常被认为是不好的做法。因此,让构造函数自动执行此操作将是一个非常糟糕的主意。
如果构造函数是最终的,比如 static final
方法,你也不能隐藏它们,但你可以,所以我会说它们也是 final
.
关于Java:为什么不覆盖 "this( )"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10927751/