インタフェースの private メソッド
出力はどれか。
public class Main {
public static void main(String[] args) {
Report r = new Daily();
System.out.println(r.header() + " / " + r.footer());
}
}
interface Report {
default String header() { return wrap("start"); }
default String footer() { return wrap("end"); }
private String wrap(String s) { return "[" + s + "]"; }
}
class Daily implements Report {
}
- A
[start] / [end] - B
start / end - C コンパイルエラーになる
- D 実行時に例外が発生する
正解と解説を見る
正解: A
- A: デフォルトメソッドの中からはインタフェースの private メソッド wrap() を呼べるので、[start] / [end] です。
- B: header() と footer() は wrap() を通して [ ] で囲んで返します。
- C: Java 9 以降、インタフェースに private メソッドを書けます。同じインタフェースの中から呼ぶのは問題ありません。
- D: 例外になる処理はありません。
ポイント
- Java 9 から、インタフェースに private メソッドを書けます。default メソッドの共通処理をまとめるのに使います。
「デフォルト・メソッドとプライベート・メソッドの使用」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)