在Java中什么时候调用super()?我在派生类的一些构造函数中看到了它,但是每个父类的构造函数不是自动调用的吗?为什么你需要使用super呢?
发布于 2010-04-14 04:19:15
如果你提供了一个这样的类:
public class Foo
{
}或者这样:
public class Foo()
{
public Foo()
{
}
}编译器将为此生成代码:
public class Foo()
{
public Foo()
{
super();
}
}因此,严格地说,对"super()“的调用总是存在的。
实际上,您应该只调用"super(...)“其中有要传递给父构造函数的参数。
调用"super()“(没有参数)没有错,但人们会嘲笑你:-)
发布于 2010-04-14 04:24:56
在这种情况下,您需要使用super():
public class Base {
public Base(int foo) {
}
}
public class Subclass extends Base {
public Subclass() {
super(15);
}
}这是一个非常做作的例子,但是当你从一个没有提供默认的无参数构造函数的类继承时,你唯一需要调用super()的时候。在这种情况下,您需要从子类的构造函数显式调用super(),传入满足基类的构造函数所需的任何参数。此外,对super()的调用必须是继承类的构造函数的第一行。
发布于 2010-04-14 04:20:06
不需要调用super()。
来自Accessing Superclass Members:
使用super()时,将调用超类的无参数构造函数。使用super(参数列表),调用具有匹配参数列表的超类构造函数。
注意:如果构造函数没有显式调用超类构造函数,Java编译器会自动插入对超类的无参数构造函数的调用。如果超类没有无参数构造函数,则会出现编译时错误。Object确实有这样的构造函数,所以如果Object是唯一的超类,就不会有问题。
https://stackoverflow.com/questions/2632882
复制相似问题