我正在学习接口。这里会发生什么?以及为什么我收到一条消息:
“对超级类型SomeInterface2的非法引用,不能绕过更具体的直接超级类型interfejsy.SomeInterface3”
public interface SomeInterface1 { public default void action(){ System.out.println("default interface1 method"); }; } public interface SomeInterface2 { public default void action(){ System.out.println("default interface2 method"); }; } public interface SomeInterface3 extends SomeInterface2{ public default void action(){ System.out.println("default interface3 method"); } }
...
public class ClassImplementingInterface implements SomeInterface1, SomeInterface2, SomeInterface3{ //Every interface has action() method so we have to override it @Override public void action() { SomeInterface1.super.action(); SomeInterface2.super.action(); //---- compiler error SomeInterface3.super.action(); } }
chen boon.. 5
您不能访问SomeInterface2的默认方法,因为它是SomeInterface3的超级接口。作为实现类,ClassImplementingInterface只能访问其直接超级接口的默认方法。从逻辑的角度来看,ClassImplementingInterface既实现了SomeInterface2又实现了SomeInterface3,但是SomeInterface2是超级接口,似乎不合理,如果必须这样做,请尝试以下程序。
public interface SomeInterface1 { public default void action(){ System.out.println("default interface1 method"); }; } public interface SomeInterface2 { public default void action(){ System.out.println("default interface2 method"); }; } public interface SomeInterface3 extends SomeInterface2{ public default void action(){ System.out.println("default interface3 method"); } public default void action2(){ SomeInterface2.super.action(); } } public class ClassImplementingInterface implements SomeInterface1,SomeInterface2,SomeInterface3{ public void action() { SomeInterface1.super.action(); SomeInterface3.super.action2(); SomeInterface3.super.action(); }
}
您不能访问SomeInterface2的默认方法,因为它是SomeInterface3的超级接口。作为实现类,ClassImplementingInterface只能访问其直接超级接口的默认方法。从逻辑的角度来看,ClassImplementingInterface既实现了SomeInterface2又实现了SomeInterface3,但是SomeInterface2是超级接口,似乎不合理,如果必须这样做,请尝试以下程序。
public interface SomeInterface1 { public default void action(){ System.out.println("default interface1 method"); }; } public interface SomeInterface2 { public default void action(){ System.out.println("default interface2 method"); }; } public interface SomeInterface3 extends SomeInterface2{ public default void action(){ System.out.println("default interface3 method"); } public default void action2(){ SomeInterface2.super.action(); } } public class ClassImplementingInterface implements SomeInterface1,SomeInterface2,SomeInterface3{ public void action() { SomeInterface1.super.action(); SomeInterface3.super.action2(); SomeInterface3.super.action(); }
}