我希望我的类有一个只能由它自己或它的子类调用的方法。
最接近的是protected
访问权限,但它也允许同一个包中的其他类调用该方法,这是我不想要的。
有没有办法实现这一点,或者我应该考虑某种包重构?
在我看来,private
不会让子类使用该方法。
答案 0 :(得分:4)
请参阅In Java, difference between default, public, protected, and private
没有这样的事情。但是您可以在空包中移动该类并使用protected
。
答案 1 :(得分:3)
简答:重构你的包
说明:
java规范认为package
关系比subclass
的关系更紧密。这是因为只要我导入它就可以扩展任何类。
如果您想确保即使是包外的子类也无法访问该方法,请使用default
可见性修饰符。
答案 2 :(得分:0)
要完成此操作,请将您的类放在自己的包中,并使方法默认保护。包中没有任何其他类可以通过包访问来调用它。
另外考虑一下,如果你所在的seal the jar,只有你控制给定包中的内容并且有效地锁定了其他任何人在你定义的包中创建一个类 - 没有其他人会能够在包中引入一个类并打破封装。
答案 3 :(得分:0)
很抱歉,如果您希望子类能够调用或覆盖方法而不使其protected
,则public
是您唯一的选择。如果您不希望同一个包中的其他类由于某种原因访问,请将您的类移动到新包。但是,如果您认为包和访问控制关键字形成某种DRM(即数字版权管理)系统而不仅仅是代码管理和类“合同”系统,那么您就错了。将访问控制关键字视为文档,编译器有能力验证其他代码何时不符合文档所表达的声明。