クラスとメソッド応用問題

以下のコードで、メソッド printInfo() を呼び出すとき、どのような結果になりますか? class Animal { String name = "Animal"; void printInfo() { System.out.println(name); } } class Dog extends Animal { String name = "Dog"; } public class Main { public static void main(String[] args) { Dog dog = new Dog(); dog.printInfo(); } }

A.Animal
✗ printInfo() は Dog クラスでオーバーライドされていないため、親クラス Animal のメソッドが実行されます。その中で name は親クラスのフィールドを参照します。
B.Dog← 正解
✓ 正解です。printInfo() は Animal クラスのメソッドのままなので、親クラスの name フィールド "Animal" が出力されます。フィールドはオーバーライドではなくシャドウイングです。
C.nullが出力される
✗ Dog クラスで String name = "Dog" と初期化しているため、null は出力されません。
D.コンパイルエラーが発生する
✗ このコードは正しい文法です。メソッドのオーバーライドやフィールドのシャドウイングは Java の正当な機能です。

Oracle Certified Java Programmer, Bronze SE の問題一覧