2012-12-20 45 views
0

考慮 -爲什麼帶arg的構造函數undefine defualt的構造函數?

public class Class_A { 

    public void func() {...} 

    public void func(int a){...} 

所有這三個 -

Class_A a = new Class_A(); // legal 
a.func(); // legal 
a.func(1); // legal 

但經過構造與ARGpublic Class_A (int a){...}添加到Class_A,成爲是默認構造函數 -

Class_A a = new Class_A(); // The constructor Class_A() is undefined 

那我強迫我把public Class_A() {/*Do Nothing*/}加入Class_A

由於每個類都有默認構造函數,爲什麼不都默認構造函數構造與ARG可以並存只是相同的func()func(int a)是誰?

回答

2

它有默認的構造函數,除非你定義自己的構造函數,在這種情況下,你需要重新定義默認構造函數

2

因爲如果你寫一個構造函數,編譯器不會寫一個默認的構造函數爲您服務。你必須明確地寫一個。

JLS

如果一個類不包含任何構造函數聲明,那麼默認的構造函數 沒有正式參數,沒有throws子句是​​ 隱式聲明。

1

這是相反的。

如果您沒有任何構造函數,默認情況下會得到no-arg。

0

名稱「默認構造函數」意味着它在您自己不提供的時候提供。只要您提供自己的構造函數,編譯器就不會爲您生成默認的構造函數。

小心不要將默認構造函數與無參數構造函數混淆。這是兩個完全不同的東西。

相關問題