“构造函数不是继承的”究竟意味着什么?

时间:2011-03-22 19:43:55

标签: java

我在某处读过Java中的“构造函数不是继承的”。

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

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

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

2 个答案:

答案 0 :(得分:9)

这意味着你不能使用超类的构造函数创建子类 - 如果子类也没有声明它。一个例子;

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

class B extends A {    
}

现在你不能这样做:

B b = new B("testing");

答案 1 :(得分:6)

这只是因为你的超类有一个构造函数并不意味着子类会自动获得相同的构造函数;你必须手动定义它。

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