0

検討 -

public class Class_A {

    public void func() {...}

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

3つすべて-

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

しかし、arg likeのコンストラクターpublic 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)あるのはなぜですか?

4

4 に答える 4

2

独自のコンストラクターを定義しない限り、デフォルトのコンストラクターがあります。この場合、デフォルトのコンストラクターを再定義する必要があります。

于 2012-12-20T23:55:57.923 に答える
2

コンストラクターを作成する場合、コンパイラーはデフォルトのコンストラクターを作成しないためです。明示的に書く必要があります。

JLSから:

クラスにコンストラクター宣言が含まれていない場合、仮パラメーターもthrows節もないデフォルトのコンストラクターが暗黙的に宣言されます。

于 2012-12-20T23:56:10.793 に答える
1

それは逆です。

コンストラクターがない場合は、デフォルトで引数なしのコンストラクターを取得します。

于 2012-12-20T23:56:20.800 に答える
0

「デフォルトコンストラクタ」という名前は、自分で指定しない場合に提供されることを意味します。独自のコンストラクターを提供するとすぐに、コンパイラーはデフォルトのコンストラクターを生成しません。

デフォルトのコンストラクターと引数のないコンストラクターを混同しないように注意してください。これらは2つのまったく異なるものです。

于 2012-12-20T23:58:43.913 に答える