关于java:实现一个不工作的接口

Implementing an interface not working

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
    }
}

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


interface中,所有成员默认为public

不能实现(或重写)方法并分配较弱的特权,因为这不允许多态性。

您必须制作sayHello()public

1
2
3
4
5
6
7
class HelloImpl implements Hello {
    private static final String message ="Hello";

    public String sayHello() {
        return message;
    }
}

此外,内部常量应为private final


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

接口的方法是隐式公共的,但实现类方法不是