8

クラスにパラメーター化されたコンストラクターがある場合、Java がデフォルトのコンストラクターを提供しないのはなぜですか? 次の例を考えてみましょう

class A {
    int a;

    public A() {
    }

    public A(int val) {
        a = val;
    }
}

ここでは、明示的にデフォルト コンストラクターを追加する必要があります。パラメータ化されたコンストラクターを持つクラスにJavaがデフォルトのコンストラクターを提供しない理由はありますか?

4

4 に答える 4

10

その理由は、セキュリティとインターフェースの組み合わせに関係しています。コンパイラは、明示的に定義していないメソッドを提供するべきではありません。1 つの例外は、コンストラクターを指定しない場合の便利な引数なしのコンストラクターです。コンストラクターを指定すると、コンパイラーは、他のコンストラクターは不要であると見なします。

于 2013-04-16T20:19:44.157 に答える
2

デフォルトのコンストラクタを持つことが望ましくない状況があります。言語は、コンパイラにそれを生成しないように指示する何らかの方法を提供する必要があります。明示的なコンストラクターの存在以外のインジケーターを使用すると、デフォルトが無効になっている場合は常にコンストラクターを指定する必要があるなどの問題が発生します。

現在の配置では、デフォルトが無効になっている場合は常に別のコンストラクターが存在することを保証することで、その問題を解消しています。

于 2013-04-16T20:36:53.903 に答える
2

クラスで何も定義されていない場合、Java はデフォルトのコンストラクターを提供します。

コンストラクターが定義されている場合(引数がない場合でも)、コンパイラーは別のコンストラクターを提供しません。

このように指定されているため、このように動作します。詳細については、言語仕様を参照してください。

于 2013-04-16T20:15:16.643 に答える