实现一个不起作用的接口

时间:2014-06-17 21:00:45

标签: java

public class TestImpl {
    public static void main(String[] args) {
        HelloImpl h1 = new HelloImpl(), h2 = h1;
        h1.message = "holla";
        System.out.println(h2.sayHello());
    }
}

interface Hello {
    String sayHello();
}

class HelloImpl implements Hello {
    static String message = "Hello";

    String sayHello() {
        return message;
    }
}

我得到"尝试分配较弱的特权。"

2 个答案:

答案 0 :(得分:6)

interface中,所有成员默认为public

您无法实现(或覆盖)方法并分配较弱的权限,因为这不允许多态。

您必须sayHello() public

class HelloImpl implements Hello {
    private static final String message = "Hello";

    public String sayHello() {
        return message;
    }
}

此外,内部常量应为private final

答案 1 :(得分:1)

“接口中的所有抽象,默认和静态方法都是隐式公共的,因此您可以省略public修饰符。” 来自http://docs.oracle.com/javase/tutorial/java/IandI/interfaceDef.html

您的界面的方法是隐式公开的,但实现类方法不是