Java 为什么我能够从在同一对象的另一个实例上调用的方法访问一个实例的私有实例变量?

Java 为什么我能够从在同一对象的另一个实例上调用的方法访问一个实例的私有实例变量?,java,oop,inheritance,polymorphism,modifier,Java,Oop,Inheritance,Polymorphism,Modifier,在以下代码中: 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

在以下代码中:

 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的私有变量应该可以直接访问。请澄清

当我在实例p1上调用方法“invoke”并将p2作为参数传递时,我能够在实例p1上调用的invoke方法内直接访问p2的私有实例变量。为什么这不会引发编译时错误


因为这不是一个错误<代码>名称对
人员
类是私有的,而不是类的特定实例。没有每个实例的隐私。Java的访问控制与代码所属的类(扩展为包)有关,而不是与调用它的实例有关。

请求帮助时,请花时间合理地格式化代码。