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;
}
}
我得到"尝试分配较弱的特权。"
答案 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
您的界面的方法是隐式公开的,但实现类方法不是