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()"(没有参数)没有错,但人们会嘲笑你:-)
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()必须是继承类的构造函数的第一行.