以下の例を考えてみましょう。
public class Testing extends SupCls implements Intf {
public static void main(String[] args) {
new Testing().test();
}
}
class SupCls {
public void test() {
System.out.println("From SupCls");
}
}
interface Intf {
public default void test() {
System.out.println("From Intf");
}
}
ご覧のとおり、SupCls
クラスとIntf
インターフェイスの間に接続はありません。しかし、どちらも共通のメソッドを定義しています。
そしてTesting
クラスは拡張SupCls
して実装してIntf
います。
したがって、出力でtest()
メソッドを呼び出すと、Testing
From SupCls
クラスからの拡張は、インターフェイスからの実装よりも優先される必要があるため、これは理にかなっていると思います。
しかし、以下のスクリーン キャプチャに示すように、Eclipse はそうではないと報告します。
これはEclipseのバグであると強く信じています。
しかし、仮定する前に、この動作はJLSで定義および文書化されていますか? または、この動作を定義する何か他のものがありますか?
編集: Eclipse のバージョンはMars Release (4.5.0)です。