为什么我能够从在同一对象的另一个实例上调用的方法访问一个实例的私有实例变量?
Why am I able to access a private instance variable of one instance from a method invoked on another instance of the same object?
在下面的代码中:
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 class 的一个实例,但该方法是在 p1 而不是 p2 上调用的,因此,只有 p1 的私有变量应该可以直接访问。请说明。
When I invoke the method "invoke" on instance p1 and pass p2 as argument, I am able to access p2's private instance variable directly inside the invoke method which was invoked on the instance p1. Why is this not throwing a compile time error?
因为这不是错误。 name
是 Person
class 私有的,而不是 class 的特定 实例 私有的。没有每个实例的隐私。 Java 的访问控制与代码所属的 class(以及扩展包)相关,而不是它被调用的实例。
在下面的代码中:
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 class 的一个实例,但该方法是在 p1 而不是 p2 上调用的,因此,只有 p1 的私有变量应该可以直接访问。请说明。
When I invoke the method "invoke" on instance p1 and pass p2 as argument, I am able to access p2's private instance variable directly inside the invoke method which was invoked on the instance p1. Why is this not throwing a compile time error?
因为这不是错误。 name
是 Person
class 私有的,而不是 class 的特定 实例 私有的。没有每个实例的隐私。 Java 的访问控制与代码所属的 class(以及扩展包)相关,而不是它被调用的实例。