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()调用会有什么问题吗?
一点都不.
正如@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)
| 归档时间: |
|
| 查看次数: |
2905 次 |
| 最近记录: |