为什么我的界面方法无法覆盖?

时间:2016-07-28 04:56:01

标签: java error-handling interface compiler-errors

我试图实现这样的界面:

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

但是它显示错误:
Ame和Chin talk()无法实现Human talk()。
方法被重写为静态。
请告诉我为什么会这样,以及如何解决这个错误。

3 个答案:

答案 0 :(得分:2)

Static methodsClass的一部分,而不是对象。 Overridingpolymorphism的概念,即与实例关联的方法可以有多种行为。

静态方法与实例无关,无法应用polymorphism

答案 1 :(得分:0)

当您将方法声明为static时,它属于整个类,而不是特定实例。接口的方法在Java中不能是静态的。实现接口时,需要为接口的抽象方法提供实例方法。使用静态方法时,静态方法会尝试隐藏同名的实例方法。但这会违反实现接口时要遵循的规则。因此,我们不能在实现类中将接口方法设置为静态。

答案 2 :(得分:0)

您不能以这种方式从静态方法引用非静态接口。本质上,静态方法是可以直接访问而无需重新创建本地重复对象的方法,但其值不能以相同的方式修改。真的,这个问题的解决方案非常简单。 从覆盖的talk()方法中删除静态修饰符