Java で、私のクラスがスーパー クラスを拡張し、デフォルトでコンストラクタの最初の行が である場合Super()
、スーパー クラスのフィールドは初期化されますか、それともコンストラクタのみが実行されますか?
また、スーパークラスのコンストラクターがたまたま両方のクラスにあるメソッドを呼び出した場合、スーパークラスまたはサブクラスのバージョンを実行しますか?
Java で、私のクラスがスーパー クラスを拡張し、デフォルトでコンストラクタの最初の行が である場合Super()
、スーパー クラスのフィールドは初期化されますか、それともコンストラクタのみが実行されますか?
また、スーパークラスのコンストラクターがたまたま両方のクラスにあるメソッドを呼び出した場合、スーパークラスまたはサブクラスのバージョンを実行しますか?
Java で、クラスがスーパー クラスを拡張し、デフォルトでコンストラクタの最初の行が Super() である場合、スーパー クラスのフィールドは初期化されますか? それともコンストラクターだけが実行されますか?
スーパークラスのフィールドは、スーパークラス コンストラクタ本体が実行される前に常に初期化されます。
詳細については、JLS のセクション 15.9.4およびセクション 12.5を参照してください。
また、スーパークラスのコンストラクターがたまたま両方のクラスにあるメソッドを呼び出した場合、スーパークラスまたはサブクラスのバージョンを実行しますか?
サブクラスのメソッドが実際にスーパークラスのメソッドをオーバーライドすると仮定すると、サブクラスの実装が呼び出されます。これは、メソッドがサブクラス コンストラクターによって初期化されたものに依存できないことを意味するため、一般的に悪いことと見なされます。