2015-05-18 45 views
-1

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

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“调用”,并通过P2作为参数,我能够直接访问其上调用invoke方法内部P2的私有实例变量实例p1。为什么这不会引发编译时错误?尽管p2是Person类的一个实例,但是该方法在p1上调用,而不是在p2上调用,因此只应该可以直接访问p1的私有变量。请澄清。

+1

在寻求帮助时,请花时间合理地设置代码的格式。 –

回答

2

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

因为这不是错误。 namePerson类的私有,而不是该类的特定实例。没有每个实例的隐私。 Java的访问控制涉及代码所属的类(以及扩展,包),而不是调用它的实例。

相关问题