何时需要显式调用超类构造函数?
2022-08-31 10:43:38
假设我有一个扩展超类的子类。在什么情况下,我需要显式键入才能运行超类构造函数?super()
我正在看一本关于抽象类的书中的一个例子,当他们用一个非抽象的子类扩展它时,子类的默认构造函数是空白的,并且有一个注释说超类的默认构造函数将被调用。同时,我也在这里看到有人的问题没有明确调用的情况。super()
与从子类的默认/非默认构造函数调用超类的默认/非默认构造函数是否有区别?
假设我有一个扩展超类的子类。在什么情况下,我需要显式键入才能运行超类构造函数?super()
我正在看一本关于抽象类的书中的一个例子,当他们用一个非抽象的子类扩展它时,子类的默认构造函数是空白的,并且有一个注释说超类的默认构造函数将被调用。同时,我也在这里看到有人的问题没有明确调用的情况。super()
与从子类的默认/非默认构造函数调用超类的默认/非默认构造函数是否有区别?
你永远不需要
super();
如果您不指定任何其他内容,那么这就是那里的内容。在以下情况下,您只需要指定要调用的构造函数:
您声称:
同时,我也在这里看到有人的问题没有明确调用super()的例子。
您能举个例子吗?我无法想象这怎么可能...
如果不显式调用超级构造函数,则将调用参数 less 构造函数 (super())。这意味着如果没有超类的可访问的无参数构造函数,则必须自己调用特定的构造函数。
但通常情况下,即使您可以使用默认构造函数,您也无论如何都需要不同的构造函数 - 这取决于您的代码。
另请注意,如果未声明构造函数,编译器将自动生成公共默认构造函数,但一旦您编写自己的构造函数,这种情况就不会再发生。