调用super()

SIr*_*lot 28 java

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

Tof*_*eer 46

如果您提供这样的课程:

public class Foo
{
}
Run Code Online (Sandbox Code Playgroud)

或这个:

public class Foo()
{
    public Foo()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器将为此生成代码:

public class Foo()
{
    public Foo()
    {
        super();
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,严格来说,对"super()"的调用始终存在.

在实践中,您应该只调用"super(...)",其中有想要传递给父构造函数的参数.

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

  • 有时值得对super进行显式调用,如果它做了一些时髦的事情,就会引起对基类的构造函数的注意. (5认同)
  • Foo隐式扩展了java.lang.Object.对超级HAS的调用就在那里,这就是编译器将其放入的原因. (4认同)
  • 不应该`Foo`扩展另一个类?否则对超级的召唤毫无意义...... (2认同)

Skr*_*rud 23

需要super()在这样的情况下使用:

public class Base {
   public Base(int foo) {
   }
}

public class Subclass extends Base {
   public Subclass() {
      super(15);
   }
}
Run Code Online (Sandbox Code Playgroud)

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