我與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