当前位置:  开发笔记 > 编程语言 > 正文

Java中的接口:无法使已实现的方法受到保护或私有

如何解决《Java中的接口:无法使已实现的方法受到保护或私有》经验,为你挑选了3个好方法。

我知道界面必须是公开的.但是,我不希望这样.

我希望我的实现方法只能从他们自己的包中访问,所以我希望我的实现方法受到保护.

问题是我无法使接口或实现的方法受到保护.

什么是解决方法?是否存在与此问题相关的设计模式?

从Java指南中,抽象类也不能完成这项工作.



1> duffymo..:

读这个.

"公共访问说明符指示任何包中的任何类都可以使用该接口.如果未指定该接口是公共的,则只能在与接口相同的包中定义的类中访问您的接口."

那是你要的吗?


我认为在界面本身的可见性和界面方法的可见性之间存在一些混淆.您可以使界面非公开,但方法将始终是公共的.
@Jon:背后的原因/理念是什么**"方法永远是公开的"**?

2> kdgregory..:

您的类可以使用包保护并仍然实现一个接口:

class Foo implements Runnable 
{
    public void run()
    {
    }
}

如果您希望某些方法受到保护/打包而其他方法不受保护,则听起来您的课程有多个职责,应该分成多个.

阅读此评论和其他回复后编辑:

如果您以某种方式认为方法的可见性会影响调用该方法的能力,请再想一想.在没有走极端的情况下,您无法阻止某人使用反射来识别您的类的方法并调用它们.但是,这不是问题:除非有人试图破解您的代码,否则他们不会调用随机方法.

相反,将private/protected方法视为定义子类的契约,并使用接口来定义与外部世界的契约.

哦,对于决定我的例子的人应该使用K&R支撑:如果它在服务条款中规定,当然.否则,你不能找到更好的时间吗?


@jbu - 如果这个答案确实是你想要的,你应该接受它......

3> Lawrence Dol..:

当我遇到这种情况时,我使用一个包可访问的内部或嵌套类来实现接口,将实现的方法推出公共类.

通常这是因为我有一个具有特定公共API的类,它必须实现其他东西以完成它的工作(通常因为其他东西是伪装成接口的回调) - 这种情况发生在像Comparable这样的事情上.我不希望公共API被(强制公共)接口实现污染.

希望这可以帮助.

此外,如果您确实希望仅由包访问的方法,则不需要受保护的范围说明符,您需要默认(省略)范围说明符.当然,使用protected will会允许子类查看方法.

顺便说一句,我认为界面方法被推断为公共的原因是因为拥有一个只在同一个包中的类实现的接口是非常例外的.它们通常被另一个包中的某些东西调用,这意味着它们需要公开.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有