Object のメソッドを default で定義する
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
System.out.println("ok");
}
}
interface Named {
default String toString() { return "Named"; }
}
- A
okと出力される - B 実行時に例外が発生する
- C コンパイルエラーになる
- D
Namedと出力される
正解と解説を見る
正解: C
- A: Object のメソッドをデフォルトメソッドにはできないので、コンパイルエラーです。実行まで進まないので、何も出力されません。
- B: コンパイルの時点でエラーになるので、実行時の例外にはなりません。
- C: toString() など Object の public メソッドは、インタフェースのデフォルトメソッドとして定義できずコンパイルエラーになります。
- D: コンパイルエラーなので実行できません。toString() が呼ばれることもありません。
ポイント
- equals・hashCode・toString のような Object のメソッドを、default メソッドとして定義することはできません。
「デフォルト・メソッドとプライベート・メソッドの使用」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)