[英]Why do we call super() in constructor
我们有一个像这样的构造函数:
public statusArea()
{
super();
add(pageIdentifier);
}
为什么我们称之为super
呢?
使用super(),将调用超类无参数构造函数。 使用super(parameter list),将调用具有匹配参数列表的超类构造函数。
注意:如果构造函数未明确调用超类构造函数,则Java编译器会自动将调用插入到超类的无参数构造函数中。 如果超类没有无参数构造函数,则将出现编译时错误。 对象确实具有这样的构造函数,因此如果对象是唯一的超类,就没有问题。
super()
调用超类的无参数构造函数。
在您的代码中没有什么区别,因为如果不这样做,编译器将隐式添加super()
。 通常,如果希望调用父类的特定构造函数,则可以向父类的构造函数添加显式调用。
父类构造函数的调用必须是子类构造函数的第一行。
调用超类构造函数的语法是
super(); // the superclass no-arg constructor is called
要么:
super(params);//the superclass constructor with a matching params is called
注意:
如果构造函数未显式调用超类构造函数,则Java编译器会自动将调用插入到超类的无参数构造函数中。 如果超类没有无参数构造函数,则将出现编译时错误。 对象确实具有这样的构造函数,因此如果对象是唯一的超类,就没有问题。
Java中super
关键字的目的是允许您访问实例字段,实例方法或扩展类的超类的构造函数。
由于Java中的每个类都隐式地从Object
extend
,因此对不从任何类extend
的类的构造函数中的super()
调用意味着对Object
类中的no-arg构造函数的调用。
即使您没有将super()
调用明确地放在构造函数中,编译器也会添加一个。
在这里,您可以使用super()
为父类(即该类扩展的类)提供初始化任何字段或变量的机会,以便您的子类可以正常工作。 例如,超类可能包含一些您未在子类中使用的字段或变量,但是某些字段或变量是类正常工作所必需的。
在这种情况下, super()
调用超类的无参数构造函数,即。 您的班级扩展的那个。
如果使用参数调用super(...)
,则会调用具有匹配参数的超类构造函数。
正如其他人所说,如果您自己不调用super()
,则编译器将调用它。
仅在以下情况下需要指定要调用的构造函数:
您要调用具有参数的超类构造函数
您想链接到同一类中的另一个构造函数,而不是超类构造函数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.