interface Printable {
default String label() {
return "I";
}
}
class Report implements Printable {
public String label() {
return "R";
}
}
public class Main {
public static void main(String[] args) {
Printable p = new Report();
System.out.println(p.label());
}
}
選択肢
- あなたの回答
- 正解
正解
B. R
詳細解説
クラス側で同じシグネチャのメソッドを定義すると、インタフェースの default メソッドより優先されます。実体は Report なので R が表示されます。
なぜ他の選択肢が違うのか
- default メソッドは実装クラスで上書きできます。
- 両方が自動的に連結されることはありません。
- public で実装しているため、アクセス権の問題もありません。
罠ポイント
インタフェースのメソッドは public 扱いです。実装時にアクセス権を弱くするとエラーになります。