interface I1 { void f(); } interface I2 { int f(int i); } interface I3 { int f(); } interface I4 { int f(); } interface I5 extends I1, I2 {} //! interface I6 extends I1, I3 {} class C { public int f() { return 1; } } class C2 implements I1, I2 { public void f() {} public int f(int i) { return 1; } } class C3 extends C implements I2 { public int f(int i) { return 1; } // overloaded } class C4 extends C implements I3 { // Identical, no problem: public int f() { return 1; } // overriden } class C5 extends C implements I3, I4 { //public int f() {return 5;} } // Methods differ only by return type: //! class C5 extends C implements I1 {} public class InterfaceCollision { public static void main(String args[]) { int i = new C5().f(); System.out.println(i); } }