Java教程说我可以有一个包专用接口,但是我不能


问题内容

Java教程“定义接口”中,它说

如果未指定interface为public,则只有与该接口在同一包中定义的类才能访问该接口。

但是这个

interface PPInterface {
    void foo();
    void bar();
}

class NewClass implements PPInterface {
    void foo() {}
    void bar() {}
}

生成编译器错误是NewClass因为我试图分配较弱的访问权限;是公开的”。那么文档有误,或者我做错了什么,或者我对文档有误解?

我想我不必使用接口-我喜欢它,因为它可以使事情井井有条。


问题答案:

接口本身可以是包私有的,而不是其中的方法。您可以定义一个只能在其定义的包中使用(按名称)的public接口,但是其方法类似于所有接口方法。如果类实现该接口,则其定义的方法必须为public。这里的关键是接口
类型 在包外部不可见,而不是方法。文档并不正确,因为使用接口中定义的方法与使用接口本身不同。

还应注意,在定义接口时,public在方法定义之前不添加内容不会更改任何内容,因为方法都是隐式的public

如果您已实现接口的类本身是程序包私有的,public则接口方法的强弱显然不是问题。如果单继承问题不会对您造成影响,您当然也可以使用抽象类而不是接口:

abstract class Whatever {
  abstract void foo();
  abstract void bar();
}