1

Java で、私のクラスがスーパー クラスを拡張し、デフォルトでコンストラクタの最初の行が である場合Super()、スーパー クラスのフィールドは初期化されますか、それともコンストラクタのみが実行されますか?

また、スーパークラスのコンストラクターがたまたま両方のクラスにあるメソッドを呼び出した場合、スーパークラスまたはサブクラスのバージョンを実行しますか?

4

2 に答える 2

9

Java で、クラスがスーパー クラスを拡張し、デフォルトでコンストラクタの最初の行が Super() である場合、スーパー クラスのフィールドは初期化されますか? それともコンストラクターだけが実行されますか?

スーパークラスのフィールドは、スーパークラス コンストラクタ本体が実行される前に常に初期化されます。

詳細については、JLS のセクション 15.9.4およびセクション 12.5を参照してください。

また、スーパークラスのコンストラクターがたまたま両方のクラスにあるメソッドを呼び出した場合、スーパークラスまたはサブクラスのバージョンを実行しますか?

サブクラスのメソッドが実際にスーパークラスのメソッドをオーバーライドすると仮定すると、サブクラスの実装が呼び出されます。これは、メソッドがサブクラス コンストラクターによって初期化されたものに依存できないことを意味するため、一般的に悪いことと見なされます。

于 2013-05-14T10:02:15.633 に答える