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