2016-07-28 63 views
1

我想實現這樣的接口:爲什麼我的界面方法不能被覆蓋?

public interface Human{ 

    void talk(); 
} 



public class Ame implements Human{ 

    public static void talk(){ 
     System.out.println("Speak English"); 
    } 
} 



public class Chin implements Human{ 

    public static void talk(){ 
     System.out.println("Speak Chinese"); 
    } 
} 


public class test { 

    public static void main(String[] args){ 

     Chin c = new Chin(); 
     c.talk(); 
     Ame a = new Ame(); 
     a.talk(); 
} 
} 

但它顯示錯誤:
阿梅和Chin談()無法實現人的談話()。
方法被重寫爲靜態。
請告訴我爲什麼發生這種情況,以及如何解決這個錯誤。

+4

爲什麼你要使用靜態方法? – John3136

+1

您不能擁有同名和簽名的靜態和非靜態方法。而靜態方法不會實現該接口。 – Thilo

+0

我只是好奇爲什麼人類的談話()不能被重寫爲靜態談話()。 – AngusMurphy

回答

2

Static methodsClass的一部分,而不是對象。 Overridingpolymorphism的概念,即與實例關聯的方法可以具有多個行爲。

靜態方法不與實例關聯,並且polymorphism無法應用。

0

當你聲明一個方法爲static時,它屬於整個類而不是特定的實例。在Java中,接口的方法不能是靜態的。當你實現一個接口時,你需要爲接口的抽象方法提供一個實例方法。當您使用靜態方法時,您的靜態方法會嘗試隱藏相同名稱的實例方法。但是這會違反實現接口時要遵循的規則。因此我們不能將接口方法在實現類中設置爲靜態。

0

這種方式不能從靜態方法引用非靜態接口。實質上,靜態方法是可以直接訪問而不重新創建本地重複對象的方法,但其值不能以相同方式修改。真的,解決這個問題很簡單。 從重載的talk()方法中刪除靜態修飾符

相關問題