在下面的代码中:
class Person {
private String name;
private int x = 5;
public Person(String name) {
this.name = name;
}
public void invoke(Person p) {
System.out.println(p.name);
}
}
class YU {
public static void main(String args[]) {
Person p1 = new Person("P1");
Person p2 = new Person("P2");
p1.invoke(p2);
}
}
当我在实例p1上调用方法“invoke”并将p2作为参数传递时,我能够直接在实例p1上调用的invoke方法中访问p2的私有实例变量。为什么这不会引发编译时错误?尽管p2是Person类的一个实例,但是该方法是在p1而不是p2上调用的,因此只能直接访问p1的私有变量。请澄清。
答案 0 :(得分:2)
当我在实例p1上调用方法“invoke”并将p2作为参数传递时,我能够直接在实例p1上调用的invoke方法中访问p2的私有实例变量。为什么这不会引发编译时错误?
因为这不是错误。 name
是Person
类的私有,而不是该类的特定实例。没有每个实例的隐私。 Java的访问控制涉及代码所属的类(以及扩展名,包),而不是调用它的实例。