包和类范围规则?

时间:2012-10-07 17:07:48

标签: java scope packages

我正在编写一个分为包的Java程序。 如何在其中定义的范围及其子范围中授予类的权限。

例如,我有3个包app.A,app.A.Sub,app.B。在packge A中,我有GlobalA类 我想只有包app.A和app.A.Sub才能使用GlobalA,但app.B无法使用它。

我该怎么做?

4 个答案:

答案 0 :(得分:3)

java包中绝对没有层次结构。只有名字。

所以包a.subaa没有特殊关系。你无法给“子包”赋予特殊权利。

答案 1 :(得分:0)

access modifiers

的规则
    Modifier    Class   Package     Subclass    World
    public      Y   Y   Y   Y
    protected   Y   Y   Y   N
    no modifier Y   Y   N   N
    private     Y   N   N   N

根据上述规则,您希望GlobalA成为默认(无修饰符)访问权限。这将阻止B和packageA内部的任何东西看不到它。现在应该知道,当你声明一个.java文件时,你确实需要一些公共修饰符附加到一个与.java文件同名的Object。即公共类Foo驻留在Foo.java

答案 2 :(得分:0)

由于SubAB都是A的“外来”包,并且由于访问修饰符允许或禁止的所有内容都以类似方式应用于所有“外部”包,在我看来,通过简单地使用访问修饰符,在SubAB之间逻辑上是不可能的。

使用反射可能是可能的,但我认为这不值得。

答案 3 :(得分:0)

Java并没有真正使用该语言中的子包模型;它只是组织相关代码的便捷方式。也就是说,如果您有软件包aa.bb(在您的术语中,a.ba的“子包”),那么你不能对包a中的类的访问修饰符做任何事情,它们以不同的方式影响包a.bb中的代码。就Java而言,a.bba中的类具有完全相同的访问权限。