你什么时候需要显式调用超类的构造函数?
所以说我有一个扩展超类的子类。在什么情况下,我需要明确键入super()
才能让超类构造函数运行?你什么时候需要显式调用超类的构造函数?
我正在看一本关于抽象类的书中的例子,当他们用非抽象的子类扩展它时,子类的默认构造函数是空白的,并且有一个说明超类的默认构造函数将被调用的注释。与此同时,我也看到了在这里的情况下,某人的问题没有明确地呼吁super()
。
区别于从子类的默认/非默认构造函数调用超类的默认/非默认构造函数?
你从未需要的正好
super();
那会是什么那里,如果你不指定任何东西。您只需要指定构造函数调用,如果:
- 你想在同一个类来调用它有参数的超类构造函数
- 你想链到另一个构造函数,而不是父类的构造的
你声称:
同时我也看到了在这里的实例,其中一个人的问题不是explic它打电话给super()。
你能举几个例子吗?我无法想象这怎么可能...
如果你没有明确地调用一个超级构造函数,那么将调用参数less构造函数(super())。这意味着如果超类没有可用的无参数构造函数,则必须自己调用特定的构造函数。
但是,即使您可以使用默认构造函数 - 取决于您的代码,通常情况下您还是需要不同的构造函数。
另请注意,如果没有声明构造函数,编译器会自动生成一个公共的默认构造函数,但只要您编写自己的构造函数,就不会再发生这种情况。
super()
方法总是在子类的构造函数中调用,即使它没有明确写入代码。
您需要编写它的唯一时间是在具有不同初始化参数的超类中有多个super(...)
方法。
“唯一需要编写它的时间是,如果超类中有几个具有不同初始化参数的超类(...)方法。”不对。只要有一个可用的参数较少的构造函数,就可以有一百个其他构造函数没有任何问题。 – Voo 2011-06-11 21:28:12
是我还是没有答案解决“为什么你需要调用一个超类的构造函数在一个子类” – 2016-04-09 08:03:45