クラスのメソッドが優先
出力はどれか。
public class Main {
public static void main(String[] args) {
System.out.println(new Impl().hi());
}
}
interface Greet {
default String hi() { return "interface"; }
}
class Base {
public String hi() { return "class"; }
}
class Impl extends Base implements Greet {
}
- A
class - B
interface - C コンパイルエラーになる
- D
classinterface
正解と解説を見る
正解: A
- A: クラスのメソッドとデフォルトメソッドが重なると、クラス (親クラス) の方が優先されるので class です。
- B: クラスから継承したメソッドが優先されるので、インタフェースのデフォルトメソッドは使われません。
- C: Base の public hi() が Greet の hi() を実装した扱いになるので、コンパイルできます。
- D: どちらか一方のメソッドだけが呼ばれます。
ポイント
- 同じメソッドが親クラスとインタフェースの default の両方から来るときは、クラスのメソッドが優先されます。
「デフォルト・メソッドとプライベート・メソッドの使用」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)