可访问性私有成员访问Java
是类级别或对象级别的私有成员访问权限。如果是在对象级别,则不应编译以下代码
class PrivateMember {
private int i;
public PrivateMember() {
i = 2;
}
public void printI() {
System.out.println("i is: "+i);
}
public void messWithI(PrivateMember t) {
t.i *= 2;
}
public static void main (String args[]) {
PrivateMember sub = new PrivateMember();
PrivateMember obj = new PrivateMember();
obj.printI();
sub.messWithI(obj);
obj.printI();
}
}
请澄清在sub的messWithI()方法中访问obj的成员i是否有效
# 1 楼答案
班级级别。其思想是,类的代码(除此之外)知道如何处理该类的对象
如果你可以访问类的源代码,那么对你“隐藏”任何东西都没有什么意义
# 2 楼答案
请注意,您甚至不需要源代码级别的访问来处理私有字段。通过使用
java.lang.reflect.AccessibleObject.setAccessibe()
,所有代码都可以访问所有其他代码的所有私有成员,除非您指定了不允许它的安全策略private
本身并不是一种安全功能这仅仅是对其他开发人员的一个强烈提示,即代码中的其他部分不应该依赖的内部实现细节# 3 楼答案
为了补充DevSolar的答案,我希望messWithI被声明为静态的:
} 在没有“静态”提示的情况下,我甚至很难理解你想要做什么。。。这也让你更容易回答你最初的问题——即私人成员的范围不限于所讨论的实例