2014-04-05 23 views
0

在许多情况下,Java编译器会生成构造函数并注入超级构造函数调用。是否可以禁用隐式构造函数方法/调用的注入?

例如,

class Foo { 
    Foo() {} 
} 

成为

class Foo { 
    Foo() { 
     super(); 
    } 
} 

我并不热衷于在不同的环境下,我想使代码明确。

如果可能的话,如何禁止Java编译器执行此操作?

+0

请分享一些代码片段。 – Braj

+0

@Braj我刚加了一些。 –

+0

试试这个'class Foo {Foo(int x){}}' – Braj

回答

1

不能禁止Java编译器调用super - 这是如何在Java中设计面向对象的核心原则之一。

可能但是能够告诉您的IDE始终显示这些调用(或不)。

然而我建议坚持使用标准 - 每一个Java开发人员都知道这件事,什么可能看起来有些奇怪和陌生到现在你将成为一个很短的时间后完全合理... :)

+0

通过让IDE显示呼叫,你是什么意思? –

+0

我的意思是通常一个IDE会像你的第一个片段一样显示代码。但可能会有一个设置让它看起来像你的第二个片段。我隐约记得,我在Eclipse中看到了一些相关的东西,但必须承认简单的谷歌搜索没有产生任何结果;) –

0

默认构造函数。如果您没有为某个类定义构造函数,那么编译器会自动创建一个默认的无参数构造函数。默认构造函数调用默认的父构造函数(super()),并将所有实例变量初始化为默认值(数字类型为零,对象引用为null,布尔值为false)。

仅当没有构造函数时才会创建默认构造函数。如果您为您的类定义了任何构造函数,则不会自动创建默认构造函数。

任何子类构造函数中的第一条语句是ALWAYS super()。没有必要调用它,因为如果超类有一个没有参数的默认构造函数,它将自动提供。

如果父类没有默认构造函数,则必须添加超级(params)调用。

如果没有明确扩展任何类,记住所有类将隐含扩展Object

+0

10 Java是否会生成对显式定义的零参数构造函数的调用?术语“默认构造函数”是指任何零参数构造函数还是仅指隐式生成的零参数构造函数? –

+0

是的,它会的。 “默认构造函数”是显式定义或隐式生成的零参数构造函数。不要紧。 – alfcope

+0

不是按照[答案](http:// stackoverflow。com/a/4488766/881334)和相应的Java语言规范[摘录](http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8.9) 。 –

相关问题