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

2022-09-01 11:44:41

我知道接口必须是公开的。但是,我不想那样。

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

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

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

从Java指南中可以看出,抽象类也无法完成这项工作。


答案 1

阅读此内容

“公共访问说明符指示接口可由任何包中的任何类使用。如果未指定接口是公共的,则只有与接口相同的包中定义的类才能访问您的接口

这是你想要的吗?


答案 2

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

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

如果你希望某些方法受到保护/打包,而其他方法则不受保护,这听起来像是你的类有多个责任,应该分成多个。

阅读对此回复和其他回复的评论后进行编辑:

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

相反,将私有/受保护的方法视为定义子类的协定,并使用接口来定义与外部世界的协定。

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