Don*_* Li 4 java constructor overriding final this
见下面的例子:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
A
Run Code Online (Sandbox Code Playgroud)
Q1:似乎java没有对"this(1)"执行后期绑定.它已在编译时决定.请确认.
Q2:Java不对任何构造函数执行后期绑定.请确认.
问题3:这是否意味着构造函数是隐式最终的?
你不能覆盖构造函数.它们根本不遵循继承规则.它们不能遵循inhertitance规则,因为您需要一个简单的构造对象的顺序.
例如,在你的例子中,如果你可以覆盖A(int)构造函数,A()将调用B(int),但是B(int)隐式调用super(),它是A(),并且你有无限递归.
构造函数调用可覆盖方法通常被认为是不好的做法.因此,让构造函数自动执行此操作将是一个非常糟糕的主意.
如果构造函数是最终的,static final
那么你也无法隐藏它们,但是你可以,所以我会说它们也是final
.