2016-07-28 15 views
1

Ich versuche Schnittstelle wie folgt umzusetzen:Warum können meine Schnittstellenmethoden nicht überschrieben werden?

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(); 
} 
} 

Aber es zeigt Fehler:
Ame und Chin sprechen() kann nicht implementieren Menschen talk().
Methoden werden als statisch überschrieben.
Bitte sagen Sie mir, warum dies behoben und wie Sie diesen Fehler beheben können.

+4

) Warum versuchen Sie, statische Methoden zu verwenden? – John3136

+1

Sie können keine statische und eine nicht statische Methode mit demselben Namen und derselben Signatur verwenden. Und eine statische Methode implementiert die Schnittstelle nicht. – Thilo

+0

Ich bin nur neugierig, warum Human Talk() nicht als statisches Gespräch() überschrieben werden kann. – AngusMurphy

Antwort

2

Static methods sind Teil von Class und nicht Objekte. Overriding ist ein Konzept von polymorphism, dh eine Methode, die einer Instanz zugeordnet ist, kann mehrere Verhaltensweisen haben.

Statische Methoden sind nicht der Instanz zugeordnet und polymorphism kann nicht angewendet werden.

0

Wenn Sie eine Methode als static deklarieren, gehört sie zu der Klasse als Ganzes und nicht zu einer bestimmten Instanz. Die Methoden einer Schnittstelle dürfen in Java nicht statisch sein. Wenn Sie eine Schnittstelle implementieren, müssen Sie eine Instanzmethode für die abstrakten Methoden der Schnittstelle bereitstellen. Wenn Sie eine statische Methode verwenden, versucht Ihre statische Methode, die gleichnamige Instanzmethode auszublenden. Dies würde jedoch die Regeln verletzen, die bei der Implementierung einer Schnittstelle zu beachten sind. Daher können wir die Interface-Methoden in der implementierenden Klasse nicht statisch machen.

0

Sie können auf diese Weise nicht von einer statischen Methode auf eine nicht statische Schnittstelle verweisen. Im Wesentlichen ist eine statische Methode eine Methode, auf die direkt zugegriffen werden kann, ohne dass ein lokales doppeltes Objekt neu erstellt werden muss, aber seine Werte können nicht auf die gleiche Weise geändert werden. Wirklich, die Lösung für dieses Problem ist ziemlich einfach. Entfernen Sie den statischen Modifikator aus den übergeordneten Methoden (

Verwandte Themen