2016-07-28 68 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()方法中删除静态修饰符

相关问题