繁体   English   中英

为什么我们在构造函数中调用super()

[英]Why do we call super() in constructor

我们有一个像这样的构造函数:

public statusArea()     
{           
   super();         
   add(pageIdentifier);     
}

为什么我们称之为super呢?

Oracle文档

使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM