Java 什么是;构造函数不是继承的";到底是什么意思?

Java 什么是;构造函数不是继承的";到底是什么意思?,java,Java,我在某个地方读到Java中的“构造函数不是继承的” 另一方面,我还了解到,如果我没有显式调用super,Java会自动调用没有参数的超类构造函数(这种情况下必须存在这样的构造函数) 自动调用超类构造函数(没有参数)不是一种继承形式吗 “构造函数不是继承的”到底是什么意思?它的意思是仅仅因为你的超类有一个构造函数,并不意味着子类会自动得到相同的构造函数;您必须手动定义它 默认构造函数是一种异常,而不是一种异常。它是自动为您定义的,但它不是真正的“继承”,因为它仍然是子类的一部分;它不是超类的成员。

我在某个地方读到Java中的“构造函数不是继承的”

另一方面,我还了解到,如果我没有显式调用super,Java会自动调用没有参数的超类构造函数(这种情况下必须存在这样的构造函数)

自动调用超类构造函数(没有参数)不是一种继承形式吗


“构造函数不是继承的”到底是什么意思?

它的意思是仅仅因为你的超类有一个构造函数,并不意味着子类会自动得到相同的构造函数;您必须手动定义它


默认构造函数是一种异常,而不是一种异常。它是自动为您定义的,但它不是真正的“继承”,因为它仍然是子类的一部分;它不是超类的成员。

这意味着如果子类没有声明子类,则无法使用超类的构造函数创建子类。一个例子

class A {
  A() {}
  A(String s) {}
}

class B extends A {    
}
现在您不能这样做:

B b = new B("testing");

答案中的代码不会编译,因为类B有一个隐式默认无参数构造函数,该构造函数试图调用a中的类似构造函数,但类a由于定义了构造函数,因此没有定义此默认构造函数。我已编辑了你的答案,以便将显式无参数构造函数添加到类a中。