Java:为什么"this()"没有被覆盖?

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:这是否意味着构造函数是隐式最终的?

Pet*_*rey 7

你不能覆盖构造函数.它们根本不遵循继承规则.它们不能遵循inhertitance规则,因为您需要一个简单的构造对象的顺序.

例如,在你的例子中,如果你可以覆盖A(int)构造函数,A()将调用B(int),但是B(int)隐式调用super(),它是A(),并且你有无限递归.

构造函数调用可覆盖方法通常被认为是不好的做法.因此,让构造函数自动执行此操作将是一个非常糟糕的主意.

如果构造函数是最终的,static final那么你也无法隐藏它们,但是你可以,所以我会说它们也是final.