第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() と競合するので定義できない |