一种Java方法,只能由其自己的类或其他子类调用

时间:2014-01-11 06:16:37

标签: java class methods protected

我希望我的类有一个只能由它自己或它的子类调用的方法。

最接近的是protected访问权限,但它也允许同一个包中的其他类调用该方法,这是我不想要的。

有没有办法实现这一点,或者我应该考虑某种包重构?

在我看来,private不会让子类使用该方法。

4 个答案:

答案 0 :(得分:4)

请参阅In Java, difference between default, public, protected, and private

没有这样的事情。但是您可以在空包中移动该类并使用protected

答案 1 :(得分:3)

简答:重构你的包

说明:

java规范认为package关系比subclass的关系更紧密。这是因为只要我导入它就可以扩展任何类。

如果您想确保即使是包外的子类也无法访问该方法,请使用default可见性修饰符。

Source

Stack Overflow reference

答案 2 :(得分:0)

要完成此操作,请将您的类放在自己的包中,并使方法默认保护。包中没有任何其他类可以通过包访问来调用它。

另外考虑一下,如果你所在的seal the jar,只有你控制给定包中的内容并且有效地锁定了其他任何人在你定义的包中创建一个类 - 没有其他人会能够在包中引入一个类并打破封装。

答案 3 :(得分:0)

很抱歉,如果您希望子类能够调用或覆盖方法而不使其protected,则public是您唯一的选择。如果您不希望同一个包中的其他类由于某种原因访问,请将您的类移动到新包。但是,如果您认为包和访问控制关键字形成某种DRM(即数字版权管理)系统而不仅仅是代码管理和类“合同”系统,那么您就错了。将访问控制关键字视为文档,编译器有能力验证其他代码何时不符合文档所表达的声明。