インターフェイスにより同一メソッドが複数表れたときの挙動
スーパークラスとインターフェイスのメソッド名が同一のとき
interface I { public abstract void m(); } abstract class Super { public abstract void m(); } class Sub extends Super implements I { public void m() { System.out.println("hoo"); } } public class Test { public static void main(String[]args) { new Sub().m(); } }
問題なくコンパイル&実行される。
インターフェイスのメソッドはスーパークラスですでに実装済みの時
interface I { public void m(); } class C { public void m() { System.out.println("hoo"); } } class Sub extends C implements I { } public class Test { public static void main(String[]args) { new Sub().m(); } }
これも問題なくコンパイル&実行される。
同じインターフェイスがスーパークラスとサブクラスで重複して現れたとき
interface I { public abstract void m(); } class C implements I { public void m() { } } class Sub extends C implements I { } public class Test { public static void main(String[]args) { new Sub().m(); } }
またまたこれも問題ない
ダイヤモンド継承もどき
interface I { public abstract void m(); } interface I2 extends I { // public abstract void m(); //ここにこれがあっても同じ } interface I3 extends I { // public abstract void m(); //ここにこれがあっても同じ } class C implements I2, I3 { public void m() { System.out.println("hoo"); } } public class Test { public static void main(String[]args) { new C().m(); } }
問題ないよ