你什么时候需要显式的调用一个超类的构造函数?

所以说我有一个扩展超类的子类。 在什么情况下,我需要显式键入super()来获取超类构造函数来运行?

我在一本关于抽象类的书中看到了一个例子,当它用一个非抽象的子类扩展它的时候,子类的默认构造函数是空的,并且有一个注释说超类的默认构造函数将被调用。 同时我也在这里看到有些人的问题没有明确地调用super()

区别是从子类的默认/非默认构造函数调用超类的默认/非默认构造函数?

永远不需要

 super(); 

如果你没有指定其他的东西,那将是那里的东西。 你需要指定要调用的构造函数,如果:

  • 你想调用一个有参数的超类构造函数
  • 你想连接到另一个构造函数,而不是超类的构造函数

你声称:

同时我也在这里看到有些人的问题没有明确地调用super()。

你能举个例子吗? 我无法想象这是可能的

如果你没有明确地调用一个超级构造函数,那么将会调用更less的构造函数(super())。 这意味着如果没有超类的无参数构造函数,你必须自己调用一个特定的构造函数。

但是,即使您可以使用默认的构造函数,通常也需要一个不同的构造函数 – 取决于您的代码。

另外请注意,如果没有声明构造函数,编译器会自动生成一个公共的默认构造函数,但只要您编写自己的构造函数,就不会再发生这种情况。

super()方法总是在子类的构造函数中调用,即使它没有明确地写在代码中。

唯一需要编写它的时间是在超类中有几个具有不同初始化参数的super(…)方法。