我正在编写一个分为包的Java程序。 如何在其中定义的范围及其子范围中授予类的权限。
例如,我有3个包app.A,app.A.Sub,app.B。在packge A中,我有GlobalA类 我想只有包app.A和app.A.Sub才能使用GlobalA,但app.B无法使用它。
我该怎么做?
答案 0 :(得分:3)
java包中绝对没有层次结构。只有名字。
所以包a.suba
和a
没有特殊关系。你无法给“子包”赋予特殊权利。
答案 1 :(得分:0)
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)
由于SubA
和B
都是A
的“外来”包,并且由于访问修饰符允许或禁止的所有内容都以类似方式应用于所有“外部”包,在我看来,通过简单地使用访问修饰符,在SubA
和B
之间逻辑上是不可能的。
使用反射可能是可能的,但我认为这不值得。
答案 3 :(得分:0)
Java并没有真正使用该语言中的子包模型;它只是组织相关代码的便捷方式。也就是说,如果您有软件包a
,a.b
和b
(在您的术语中,a.b
是a
的“子包”),那么你不能对包a
中的类的访问修饰符做任何事情,它们以不同的方式影响包a.b
和b
中的代码。就Java而言,a.b
和b
对a
中的类具有完全相同的访问权限。