0

プライベートコンストラクターについて読んでいて、理解できない点がいくつか見つかりました。コンストラクターをプライベートとして宣言すると、次のようになります。

  1. そのクラスを別のクラスから明示的にインスタンス化することはできません
  2. そのクラスは継承できません
  3. 静的ユーティリティメソッドのみを含むクラスで使用する必要があります

私の最初の質問:ポイント2は、クラスを継承できないと言っています。クラスprivateを宣言した場合でも、このプロパティは満たされます。クラスがプライベートの場合でも、別のクラスによって外部から明示的にインスタンス化できるためですか?

私の2番目の質問:私はポイントを理解していません3。静的メソッドでいっぱいのヘルパークラスがある場合、メソッドを使用するためにそのクラスをインスタンス化する必要はありません。では、インスタンス化することのないそのクラスのコンストラクターの目的は何ですか?

4

2 に答える 2

1

Javaの回答

質問1プライベートクラスと、プライベートコンストラクタを持つクラスを混同しています。プライベートコンストラクターは、主に、インスタンス化されることを意図していない静的クラスに使用されます(つまり、静的メソッドがたくさんあるだけです)。

質問2コンストラクターはまったく必要ないため、プライベートコンストラクターを明示的に作成して、定義されていない場合にJVMが提供するデフォルトのコンストラクターを取得しないようにする必要があります。

メソッドが定義されていない空のクラスには、デフォルトでJVMによって常に引数なしのコンストラクターが与えられます

于 2012-05-17T17:40:32.343 に答える
1

私は例としてを取り上げます(知られている最高のオブジェクト指向言語ではありませんが、非常に人気があります)-あなたはどの言語を意味するのかを定義していないからです。

Ad.2。これらの言語では、スーパークラスコンストラクターを明示的に呼び出すか、暗黙的に呼び出される必要があります。サブクラスからプライベートメソッドを呼び出すことはできません(パブリックメソッドとプロテクトメソッドのみ)。このルールはコンストラクターにも適用されます。つまり、クラスにプライベートコンストラクターしかない場合、サブクラスコンストラクターでプライベートコンストラクターを呼び出す方法はありません。したがって、そのようなクラスをサブクラス化することはできません。

広告。3.混乱を避けるためだけです。このクラスはユーティリティメソッドのコンテナにすぎないため、インスタンス化しても意味がありません。このようにして、コンパイル時にこのルールを適用できます。

于 2012-05-17T17:41:11.470 に答える