オブジェクト指向の基礎応用問題
次のコードを実行したとき、出力結果として正しいものはどれですか? class Parent { int value; Parent(int value) { this.value = value; } int getValue() { return value; } } class Child extends Parent { Child(int value) { super(value * 2); } } public class Main { public static void main(String[] args) { Child c = new Child(5); System.out.println(c.getValue()); } }
A.5
✗ Childのコンストラクタはsuper(value * 2)を呼び出すため、5ではなく10がvalueに設定されます。
B.10← 正解
✓ 正解です。Child(5)でsuper(5 * 2)つまりsuper(10)が呼ばれ、valueに10が設定されます。
C.0
✗ valueはデフォルトの0ではなくsuper(10)によって10に初期化されます。
D.コンパイルエラーが発生する
✗ super()を使った親コンストラクタの呼び出しは正しい構文であり、コンパイルエラーにはなりません。