当我使用编辑器代码生成器时,为什么eclipse会在构造函数中自动添加java super()方法?

Hor*_*ice 12 java eclipse constructor super

当我在java类中编写构造函数时,我通常不会在那里调用super().当我从eclipse源代码编辑器生成构造函数时,为什么它总是在那里添加super()?

我没有在我编写的构造函数中默认添加它是错误的吗?如果我决定使用eclipse代码生成器,那么在构造函数中抛出super()调用会有什么问题吗?

ars*_*jii 11

正如@Kon正确指出的那样,无论如何都会默认调用默认的超级构造函数(这可以通过检查字节码来轻松验证javap -c).如果您不希望Eclipse将其显式化,只需选中构造函数创建GUI底部的"忽略对默认构造函数super()的调用"复选框.

在此输入图像描述


我没有在我编写的构造函数中默认添加它是错误的吗?

不,只要你指的是默认的超级构造函数调用super().例如,如果超级构造函数接受参数,则需要显式调用.

如果我决定使用eclipse代码生成器,那么在构造函数中抛出super()调用会有什么问题吗?

一点都不.


mer*_*011 7

正如@Kon在他的评论中提到的,Java中的空构造函数包含对超类构造函数的隐式调用.

而且,没有显式调用的非空构造函数super()将在顶部进行隐式调用.

super()如果您打算使用参数自己调用不同的超类构造函数,那么唯一一次将调用留在那里是错误的.

有关详细信息,请参阅此问题.

更新:请考虑以下代码,该代码说明了离开super()eclipse生成的错误的情况.

public class Foo{
    public Foo(int a, int b) {
        System.out.println("Foo constructor with-args is called");
    }
    public Foo() {
        System.out.println("Foo with no-args is called");
    }
}
class Bar extends Foo {
    public Bar() {
        // Implicit call to super()
        super(); 

        // Explicit call to super(a,b);
        // This will not compile unless the call above has been removed.
        super(1,2);
    }
}
Run Code Online (Sandbox Code Playgroud)