为啥我能够从在同一对象的另一个实例上调用的方法访问一个实例的私有实例变量? [复制]
Posted
技术标签:
【中文标题】为啥我能够从在同一对象的另一个实例上调用的方法访问一个实例的私有实例变量? [复制]【英文标题】:Why am I able to access a private instance variable of one instance from a method invoked on another instance of the same object? [duplicate]为什么我能够从在同一对象的另一个实例上调用的方法访问一个实例的私有实例变量? [复制] 【发布时间】:2015-05-18 07:30:21 【问题描述】:在下面的代码中:
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 上调用的调用方法内访问 p2 的私有实例变量。为什么这不会引发编译时错误?尽管 p2 是 Person 类的一个实例,但该方法是在 p1 而不是 p2 上调用的,因此,只有 p1 的私有变量应该可以直接访问。请澄清。
【问题讨论】:
寻求帮助时,请花时间合理地格式化您的代码。 【参考方案1】:当我在实例 p1 上调用方法“invoke”并将 p2 作为参数传递时,我可以直接在实例 p1 上调用的调用方法内访问 p2 的私有实例变量。为什么这不会引发编译时错误?
因为这不是错误。 name
是 Person
类私有的,而不是类的特定实例。没有每个实例的隐私。 Java 的访问控制与代码所属的类(以及扩展包)有关,而不是与调用它的实例有关。
【讨论】:
以上是关于为啥我能够从在同一对象的另一个实例上调用的方法访问一个实例的私有实例变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP 中,为啥可以在同一类类型的方法中创建的新实例上调用私有方法? [复制]