你什么时候需要显式的调用一个超类的构造函数?
所以说我有一个扩展超类的子类。 在什么情况下,我需要显式键入super()
来获取超类构造函数来运行?
我在一本关于抽象类的书中看到了一个例子,当它用一个非抽象的子类扩展它的时候,子类的默认构造函数是空的,并且有一个注释说超类的默认构造函数将被调用。 同时我也在这里看到有些人的问题没有明确地调用super()
。
区别是从子类的默认/非默认构造函数调用超类的默认/非默认构造函数?
你永远不需要
super();
如果你没有指定其他的东西,那将是那里的东西。 你只需要指定要调用的构造函数,如果:
- 你想调用一个有参数的超类构造函数
- 你想连接到另一个构造函数,而不是超类的构造函数
你声称:
同时我也在这里看到有些人的问题没有明确地调用super()。
你能举个例子吗? 我无法想象这是可能的
如果你没有明确地调用一个超级构造函数,那么将会调用更less的构造函数(super())。 这意味着如果没有超类的无参数构造函数,你必须自己调用一个特定的构造函数。
但是,即使您可以使用默认的构造函数,通常也需要一个不同的构造函数 – 取决于您的代码。
另外请注意,如果没有声明构造函数,编译器会自动生成一个公共的默认构造函数,但只要您编写自己的构造函数,就不会再发生这种情况。
super()方法总是在子类的构造函数中调用,即使它没有明确地写在代码中。
唯一需要编写它的时间是在超类中有几个具有不同初始化参数的super(…)方法。