質問用紙の 1 つでこの質問を見ました。
派生クラスのコンストラクターが常に基本クラスのコンストラクターにアクセスする必要があるのはなぜですか?
質問が有効かどうか疑問に思っていますか?
質問用紙の 1 つでこの質問を見ました。
派生クラスのコンストラクターが常に基本クラスのコンストラクターにアクセスする必要があるのはなぜですか?
質問が有効かどうか疑問に思っていますか?
派生オブジェクトで継承された機能をいじり始める前に、タイプ「ベース」の有効なオブジェクトを取得できるように!
有効ではありません。それについて「すべき」はありません: それはする必要があり、コンパイラは、基本クラスのデフォルトコンストラクターが存在する場合はそれを呼び出し、存在しない場合はコンパイルエラーを与えることでそれを強制します。これにより、既存のコンストラクターの 1 つを呼び出す必要があります。 .
alwaysには例外が 1 つあります。通常、スーパークラスのデフォルト コンストラクターは明示的に呼び出されません。
コンストラクターがスーパークラス コンストラクターを明示的に呼び出さない場合、Java コンパイラーはスーパークラスの引数なしコンストラクターへの呼び出しを自動的に挿入します。スーパー クラスに引数のないコンストラクタがない場合、コンパイル時エラーが発生します。Object にはそのようなコンストラクターがあるため、Object が唯一のスーパークラスであれば問題はありません。
基本クラスは、あなたが気付いていない作業を行う可能性があるためです。
基本クラスには、初期化が必要なメンバーが含まれている可能性があるためです。
派生クラスのコンストラクターは基本クラスのコンストラクターから継承したいので、基本クラスのコンストラクターを呼び出す必要があります。そうしないと、基本クラスのコンストラクターで初期化された値を継承しません。
スーパークラスのコンストラクターの呼び出しは必須ではありませんが、スーパークラスにデフォルトのコンストラクターがある限り、強力なアドバイスと組み合わせる必要があります。それ以外の場合、コンパイラは、少なくとも 1 つのスーパークラス コンストラクターを呼び出すように強制します。
デフォルトのコンストラクターが存在する場合は、サブクラスのコンストラクターに明示的な super() ステートメントがなくても呼び出されます。
クラス構築の目に見える部分は、フィールドの初期化です。しかし、内部にはさらに多くの機能があります (メモリ割り当て、登録など)。派生クラスの作成時に、すべてのスーパークラスに対してこれを行う必要があります。