我可以在java中的静态嵌套类之间限制对私有字段的访问吗?
如果我有一个包含两个static
嵌套类的类,有没有办法限制一个类中的private static
字段从另一个类访问?例如:
public class Outer {
private static class Inner1 {
private static int privateInner1 = 0;
private Inner1() {
System.out.println(privateInner1 + ", " + Inner2.privateInner2); // prints "0, 1"
}
}
private static class Inner2 {
private static int privateInner2 = 1;
}
public static void main(String[] args) {
new Inner1();
}
}
并不是说我脑子里真的有这个用例,我只是个古玩
谢谢
# 1 楼答案
从http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6.1
您不能限制从外部类访问内部类,因为外部类可以访问内部类的成员(无论是公共的还是私有的)。在这个场景中,main方法是
Outer
的一部分,因此它将能够访问Inner1
和Inner2
的成员。最接近目标的方法是在外部类中创建接口实例,并在其中定义成员变量。外部类将无法访问这些成员变量。举个例子现在在main方法中,您将无法访问
Inner3.privateInner3
,但可以调用Inner3.doSomething()
# 2 楼答案
不可能,您可以提供的最低访问权限是
private
(,您已经提供了),并且由于您试图在同一个类中访问它们,因此您无法阻止它们访问,毕竟它们是属于同一个家族的成员# 3 楼答案
不能。当外部类的某些功能在另一个类中提取时更清晰,但它仍然与外部类紧密耦合时,可以使用内部类。因此,基本上,您应该在外部类中使用内部类来实现更好的代码分离