Java:为什么不覆盖 "this( )"?

标签 java constructor overriding this final

看下面的例子:

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/

相关文章:

java - 如何禁用控制台弹出窗口并了解 ProcessBuilder 创建的进程何时完成,以便可以将其销毁

java - 用 Java 绘制 X-Y 图

C++:如何让不同的类函数操作我的类成员变量

Java:抽象类构造函数和 this()

c++ - 成员函数的意外返回值

java - 重写java中的equals方法

java - 在 Java 中重写 hashCode()

java - json.org java 库哪里去了?

java - 将单独类中的多个组件添加到另一个类中的 JFrame

c++ - 为什么调用拷贝构造函数