super()とthis()をコンストラクタに同時に表示できないのはなぜですか?

Javaは、このクラスがjava.lang.Objectクラスのコンストラクタになるまで、コンストラクタが実行される前に親クラスのコンストラクタを実行する必要があることを規定しています。
ただし、関数のエントリポイントはサブクラスコンストラクターであるため、コンストラクターの最初の文は親コンストラクターである必要があります。superキーワードが追加されていない場合、コンパイラーはsuper()ステートメントをコンストラクターの最初の文に追加します(もちろん、これは理解できますが、コンパイル後はそうではありません)。親クラスのコンストラクターを呼び出すスーパーキーワードがある場合は、指定された親クラスのコンストラクターが使用されます。それ以外の場合は、デフォルトのパラメーターなしのコンストラクターが使用されます。これには例外もあります。これは、このクラスの他のコンストラクターを呼び出すthis()があることですが、再帰呼び出しによれば、最終的に親コンストラクターが呼び出されます; this()とsuper()の両方が存在する場合、親の初期化2つの安全でない操作。なぜなら、super()とthis()が同時に出現する場合、this()はsuper()が呼び出された後に実行され、super()はthis()で自動的に呼び出されるためです。これは、super()を2回呼び出す結果を引き起こしました。

継承する親クラスにパラメーターなしのコンストラクターがない場合は、クラスの最初の文でsuperキーワードを呼び出して、親クラスに対応するパラメーターコンストラクターを呼び出す必要があります。そうしないと、コンパイルできません。

元の記事6件を公開 賞賛された8件 訪問数138

おすすめ

転載: blog.csdn.net/qq_42848910/article/details/104481271