2016-07-28 1 views
1

Je suis en train de mettre en œuvre l'interface comme ceci:Pourquoi mes méthodes d'interface ne peuvent pas être surchargées?

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

Mais il montre des erreurs:
et Chin Amé PARLER() ne peut pas mettre en œuvre parler humain().
Les méthodes sont substituées en tant que static.
Se il vous plaît dites-moi pourquoi cela s'est avéré et comment corriger cette erreur.

+4

Pourquoi essayez-vous d'utiliser des méthodes statiques? – John3136

+1

Vous ne pouvez pas avoir une méthode statique et une méthode non statique de même nom et signature. Et une méthode statique n'implémente pas l'interface. – Thilo

+0

Je suis simplement curieux de savoir pourquoi Human talk() ne peut pas être remplacé comme static talk(). – AngusMurphy

Répondre

2

Static methods font partie de Class et non des objets. Overriding est le concept de polymorphism, c'est-à-dire qu'une méthode associée à une instance peut avoir plusieurs comportements.

Les méthodes statiques ne sont pas associées à l'instance et polymorphism ne peuvent pas être appliquées.

0

Lorsque vous déclarez une méthode comme static, elle appartient à la classe dans son ensemble et non à une instance spécifique. Les méthodes d'une interface ne peuvent pas être statiques en Java. Lorsque vous implémentez une interface, vous devez fournir une méthode d'instance pour les méthodes abstraites de l'interface. Lorsque vous utilisez une méthode statique, votre méthode statique tente de masquer la méthode d'instance du même nom. Mais cela viole les règles à suivre lors de l'implémentation d'une interface. Nous ne pouvons donc pas rendre les méthodes d'interface statiques dans la classe d'implémentation.

0

Vous ne pouvez pas référencer une interface non statique à partir d'une méthode statique de cette manière. En substance, une méthode statique est une méthode qui peut être accédée directement sans recréer un objet dupliqué local, mais ses valeurs ne peuvent pas être modifiées de la même manière. Vraiment, la solution à ce problème est assez simple. Supprime le modificateur static des méthodes talk() dominantes