default メソッド
出力はどれか。
public class Main {
public static void main(String[] args) {
System.out.println(new Ja().greet() + " " + new En().greet());
}
}
interface Greeter {
default String greet() { return "Hello"; }
}
class Ja implements Greeter {
public String greet() { return "こんにちは"; }
}
class En implements Greeter {
}
- A
こんにちは Hello - B
Hello Hello - C コンパイルエラーになる
- D
こんにちは null
正解と解説を見る
正解: A
- A: Ja は greet() をオーバーライドしているので こんにちは、En はデフォルトメソッドをそのまま使うので Hello です。
- B: Ja は greet() をオーバーライドしているので、デフォルトの Hello にはなりません。
- C: デフォルトメソッドは実装しなくてもよいので、En はコンパイルできます。
- D: En はデフォルトメソッドの Hello を使うので、null にはなりません。
ポイント
- default メソッドは中身を持つインタフェースのメソッドです。そのまま使うことも、オーバーライドすることもできます。
「デフォルト・メソッドとプライベート・メソッドの使用」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)