Pet*_*ete 31 java interface access-specifier
它说,在Java教程"定义接口"中
如果未指定接口
public,则只能在与接口相同的包中定义的类上访问您的接口.
但是,这个
interface PPInterface {
void foo();
void bar();
}
class NewClass implements PPInterface {
void foo() {}
void bar() {}
}
Run Code Online (Sandbox Code Playgroud)
生成编译器错误NewClass因为我'试图分配较弱的访问权限; 是公开的.所以文档是错误的,或者我做错了什么,或者我误解了文档?
我想我不必使用界面 - 我喜欢它,因为它保持了良好的组织.
Col*_*inD 60
接口本身可以是包私有的,而不是其中的方法.您可以定义一个只能在其定义的包中使用(通过名称)的public接口,但其方法与所有接口方法类似.如果一个类实现了该接口,那么它定义的方法必须是public.这里的关键是它是在包外不可见的接口类型,而不是方法.文档不正确,因为使用界面中定义的方法与使用界面本身不同.
还要注意,在定义接口时,不要public在方法定义之前添加任何内容,因为这些方法都是隐式的public.
如果您实现接口的类本身是包私有的,public那么接口方法的问题显然不是问题.当然,如果单继承问题没有妨碍你,你也可以使用抽象类而不是接口:
abstract class Whatever {
abstract void foo();
abstract void bar();
}
Run Code Online (Sandbox Code Playgroud)
我认为(尽管我可能是错误的这一点),其正在这里讨论的较弱的访问权限是在foo()和bar()方法NewClass。所有的接口方法都是隐式的public,但是NewClass你已经将它们保留为包私有的,这比public. 更改NewClass阅读
class NewClass implements PPInterface{
public void foo() {}
public void bar() {}
}
Run Code Online (Sandbox Code Playgroud)
可能会解决这个问题。
| 归档时间: |
|
| 查看次数: |
27060 次 |
| 最近记录: |