CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第1章 ラムダ式とは : 問題 11’ : インターフェースとクラスの抽象, デフォルト, 静的メソッド

問題 11’

void f()メソッドを持つインターフェース I とスーパークラス S があり、その両方をインプリメントかつ拡張しているクラス T がある
fメソッドが、抽象, デフォルト/標準, 静的の全ての組み合わせ(9通り)で何が起こるかを確かめよ

解答

コンパイル結果の意味
 ○ : T でf()を Override しなくてもコンパイル
 △ : T でf()を Override しなければならない
 × : T でf()を Override してもコンパイル不可

I S コンパイル 備考
抽象 抽象
抽象 標準 S#f()I#f()を解決しない
抽象 静的 × T#f()S.f()と競合して NG
デフォルト 抽象 I#f()S#f()を解決しない
デフォルト 標準
デフォルト 静的 × T#f()S.f()と競合して NG
静的 抽象
静的 標準 T#f()S#f()が呼ばれる
静的 静的 T#f()S.f()と競合するので定義できない