首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用super()

调用super()
EN

Stack Overflow用户
提问于 2010-04-14 04:14:00
回答 12查看 15.2K关注 0票数 29

在Java中什么时候调用super()?我在派生类的一些构造函数中看到了它,但是每个父类的构造函数不是自动调用的吗?为什么你需要使用super呢?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2010-04-14 04:19:15

如果你提供了一个这样的类:

代码语言:javascript
复制
public class Foo
{
}

或者这样:

代码语言:javascript
复制
public class Foo()
{
    public Foo()
    {
    }
}

编译器将为此生成代码:

代码语言:javascript
复制
public class Foo()
{
    public Foo()
    {
        super();
    }
}

因此,严格地说,对"super()“的调用总是存在的。

实际上,您应该只调用"super(...)“其中有要传递给父构造函数的参数。

调用"super()“(没有参数)没有错,但人们会嘲笑你:-)

票数 46
EN

Stack Overflow用户

发布于 2010-04-14 04:24:56

在这种情况下,您需要使用super()

代码语言:javascript
复制
public class Base {
   public Base(int foo) {
   }
}

public class Subclass extends Base {
   public Subclass() {
      super(15);
   }
}

这是一个非常做作的例子,但是当你从一个没有提供默认的无参数构造函数的类继承时,你唯一需要调用super()的时候。在这种情况下,您需要从子类的构造函数显式调用super(),传入满足基类的构造函数所需的任何参数。此外,对super()的调用必须是继承类的构造函数的第一行。

票数 25
EN

Stack Overflow用户

发布于 2010-04-14 04:20:06

不需要调用super()。

来自Accessing Superclass Members

使用super()时,将调用超类的无参数构造函数。使用super(参数列表),调用具有匹配参数列表的超类构造函数。

注意:如果构造函数没有显式调用超类构造函数,Java编译器会自动插入对超类的无参数构造函数的调用。如果超类没有无参数构造函数,则会出现编译时错误。Object确实有这样的构造函数,所以如果Object是唯一的超类,就不会有问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2632882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档