【发布时间】:2011-05-13 07:14:03
【问题描述】:
对 Java 来说相当新,但我想知道为什么包访问被认为比子类访问“更具限制性”。也就是说,每个为子类提供成员访问权限的访问修饰符也为整个包提供访问权限,并且有些修饰符提供包访问权限但不提供子类访问权限。
这不是完全倒退吗?假设我在某个包中有一个类 ControlledInstantiation。如果我有另一个类 AlsoControlledInstantiation 扩展了 ControlledInstantiation,我无法调用 ControlledInstantiation 的构造函数,除非我将它设置为受保护或公共。如果我将它设置为受保护,现在包中的任何其他类都可以随意实例化它。因此,与具有独特但相关功能的事物相比,必须可以替代其超类(并且在语法上是)的事物获得对超类的相同或更少的访问权限。这就像告诉你的孩子他不能玩你的钱包,因为你不会让你的邻居这样做,然后让你的邻居睡在你的房子里,因为你的孩子会这样做。
所以我想我在问,这个决定的动机是什么,我该如何绕过它?
【问题讨论】:
-
但是您正在为
ControlledInstantiation编写代码,因此可能是它包中代码的所有者..您是说您不信任自己吗? -
任何人都可以在任何包中创建新类,类加载器保护的类除外。除非我在所有记录的接口中隐藏内部使用的类的包名称(我认为这是不可能的,因为即使是工厂也必须导入它创建的类,并且在某些时候必须引用工厂本身,等等.),任何人都可以将一个类放入该包中。人们几乎肯定不会,除非他们想做不该做的事,但他们可以。
标签: java access-modifiers