2014-05-25 30 views
3

的工作我已經宣佈的接口無法理解的界面中的Java

public interface A { 
    public void print(); 
} 

另一個接口

public interface B extends A { 
    public void print(); 
} 

那麼類

public class C implements A,B { 
    @Override 
    public void print() { 
     System.out.println(B.i); 
    } 
} 

請告訴我爲什麼沒有編譯如果兩個接口都具有相同名稱的方法,並且編譯器如何確定哪個接口的方法正在執行,則會發生實時錯誤實施?

在此先感謝

+1

的接口以正確的方式是你的實現類有一個合同堅持。由於這兩份合同都沒有中斷,因此它是有效的代碼 –

+0

在此處閱讀[接口實現隱藏方法](http://stackoverflow.com/questions/11932037/interface-implementation-hiding-method) – Braj

回答

3

在Java中實現接口意味着,保證接口中聲明的方法在類中實現。

在您的示例中,這意味着每個實現接口A的類都有一個打印函數,它不接受任何參數並返回一個void。接口B也是如此。實現B的每個類都有一個print-funtction,它不帶任何參數並返回一個void。

如果現在類C實現了接口A和接口B,這意味着您的類必須實現在A中聲明的所有方法以及在B中聲明的所有方法。在您的示例中,這些方法重疊,但不包含衝突。因此,這沒有問題。

2

您的方法一次實現兩個接口方法。

0

界面B超控接口的方法..

當您使用的界面,您對Java說:「我會實現這個事」 一旦B改寫一個將Java說:「我將實施同樣的事情也在B上「;

所以,如果你一旦實現這個..基本上它是像你這樣的實施對他們倆的方法。而這是不使用此