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

2022-08-31 12:13:08

我正在处理一个扩展的类。JFrame

它不是我的代码,它在开始构造 GUI 之前会调用它。我想知道为什么这样做,因为我总是只访问超类的方法,而不必调用supersuper();


答案 1

对于所有具有父级的类(这是 Java 中的每个用户定义的类),都有一个隐式调用,没有参数,因此通常不需要显式调用它。但是,如果父级的构造函数采用参数,并且您希望指定参数,则可以将调用与参数一起使用。此外,如果父级的构造函数采用参数,并且它没有默认的无参数构造函数,则需要使用参数进行调用super()super()super()

例如,显式调用 to 可以对框架的标题进行一些额外的控制:super()

class MyFrame extends JFrame
{
    public MyFrame() {
        super("My Window Title");
        ...
    }
}

答案 2

当您不自己执行时,将自动调用父类的空构造函数。这就是您从未在代码中执行此操作的原因。这是为你做的。super()

当超类没有 no-arg 构造函数时,编译器将要求您使用适当的参数进行调用。编译器将确保您正确实例化该类。所以这不是你必须太担心的事情。super

无论您是否调用构造函数,都不会影响您调用父类的方法的能力。super()

顺便说一句,有些人说,为了清楚起见,通常最好手动拨打该电话。


推荐