2016-03-28 77 views
3
interface A{ 
    default void func(){ 
     System.out.println("This function is a default function in interface A!"); 
    } 
} 
interface B{ 
    default void func(){ 
     System.out.println("This function is a default function in interface B"); 
    } 
} 
class C implements A,B{ 
    public void func(){ 
     System.out.println("func in class C!"); 
     A.super.func();//What's meaning? 
    } 
} 
+0

'因爲你不能用'A.func()'因爲它不是靜態的,需要super' –

回答

4

由於兩個ABfunc()一個默認的實現,A.super.func()可以讓您調用A的缺省實現func()(並且類似地,B.super.func()將調用B的默認實現func())。

+0

爲什麼使用interface.super? –

+0

@ShawnLiu如果要調用特定接口的默認實現,並且有多個接口來實現該方法,那麼這是指定想要的實現的唯一方法。 – Eran

+0

@Eran超級是需要的,因爲你不能使用A.func(),因爲它不是靜態的 –

4
docs

如果你的方法會覆蓋其父類的方法之一,您可以通過調用super.func()您可以訪問通過使用關鍵字調用覆蓋方法超

從而func()你的超類方法。但是這兩個A & B都具有相同名稱的功能,因此您必須告訴編譯器要使用哪個超級用戶。

所以告訴A.super你通知編譯器使用接口A.同樣的方法進入對於B

+1

super是需要的,因爲你不能使用A. func(),因爲它不是靜態的 –

+1

呀..這是顯而易見的:) – stinepike

+0

是的,但不是我認爲。因此他對伊蘭的回答發表了評論。 –

相關問題