我与Java 8摆弄,并来到了下面的代码在我看来可能工作:在接口从默认的方法内访问超级方法
class UnrelatedClass implements UnrelatedInterfaceDefault {
@Override
public void unrelate2() {
System.out.println("Unrelated");
}
}
interface UnrelatedInterfaceDefault extends UnrelatedInterfaceOne, UnrelatedInterfaceTwo {
default public void unrelate() {
UnrelatedInterfaceOne.super.unrelate2();
UnrelatedInterfaceTwo.super.unrelate2();
}
}
interface UnrelatedInterfaceOne {
public void unrelate2();
}
interface UnrelatedInterfaceTwo {
public void unrelate2();
}
在UnrelatedInterfaceOne.super.unrelate()
,我得到的错误:
abstract method unrelate2() in UnrelatedInterfaceOne cannot be accessed directly.
但考虑我是否创建一个实现UnrelatedInterfaceDefault
一类的话,我其实做有实现的UnrelatedInterfaceOne
和UnrelatedInterfaceTwo
,所以它可以工作?
为什么在这种情况下会出现这个特定的编译器错误?
为了使您的工作如预期,你可以使用强制类型转换为相应的接口,而不是调用超。例如。 '((UnrelatedInterfaceOne)此).unrelate2();' – Balder