97

スーパークラスを拡張するサブクラスがあるとします。super()スーパークラス コンストラクターを実行するには、どのようなシナリオで明示的に入力する必要がありますか?

抽象クラスに関する本の例を見ていますが、非抽象サブクラスでそれを拡張すると、サブクラスのデフォルト コンストラクターが空白になり、スーパークラスのデフォルト コンストラクターが呼び出されるというコメントがあります。同時に、ここで誰かの問題が明示的に を呼び出していない例も見てきましたsuper()

スーパークラスのデフォルト/デフォルト以外のコンストラクターをサブクラスのデフォルト/デフォルト以外のコンストラクターから呼び出すこととの違いはありますか?

4

3 に答える 3

142

あなたは決して必要ありません

super();

他に何も指定しない場合は、このようになります。次の場合にのみ、呼び出すコンストラクターを指定する必要があります。

  • パラメータを持つスーパークラス コンストラクタを呼び出したい
  • スーパークラスのコンストラクターではなく、同じクラス内の別のコンストラクターにチェーンしたい

あなたはそれを主張します:

同時に、誰かの問題が明示的に super() を呼び出していないという事例もここで見てきました。

例を挙げていただけますか?それがどのように可能か想像できません...

于 2011-06-11T21:25:44.383 に答える
12

スーパー コンストラクターを明示的に呼び出さない場合は、引数のないコンストラクター (super()) が呼び出されます。これは、スーパークラスの到達可能な引数なしのコンストラクターがない場合、特定のコンストラクターを自分で呼び出す必要があることを意味します。

しかし、デフォルトのコンストラクターを使用できたとしても、とにかく別のコンストラクターが必要になることがよくあります-コードによって異なります。

また、コンストラクターが宣言されていない場合、コンパイラーはパブリックのデフォルト コンストラクターを自動的に生成しますが、独自のコンストラクターを記述するとすぐに、これは発生しなくなります。

于 2011-06-11T21:25:37.360 に答える
4

コードで明示的に記述されていなくても、super()メソッドは常にサブクラスのコンストラクターで呼び出されます。

これを記述する必要があるのはsuper(...)、スーパークラスに異なる初期化パラメーターを持つ複数のメソッドがある場合のみです。

于 2011-06-11T21:26:17.250 に答える