类的私有成员可以在Java中的不同对象中访问

时间:2018-09-17 18:52:11

标签: java scope

我对范围非常了解,但是遵循规则使我感到惊讶。

尽管System.out.println(intVar)是私有的,intVar怎么可能不会引发编译错误?

考虑以下代码:

class A {

  private int intVar = 1;

  public static void main(String[] args) {

    A a = new A(); //INITIALISATION OF NEW OBJECT
    System.out.println(a.intVar); //ACCESSING PRIVATE MEMBER OF DIFFERENT OBJECT - COMPILES   

  }
}

我知道将成员设为私有意味着您只能从同一班级对其进行访问。

但是如果我属于同一类,也可以调用其他对象的私有成员。

注意,我理解为什么可以在外部类中访问内部类的私有成员。但是,如果类应该是对象的蓝图,则使私有类成员无法访问该类之外的任何东西但不能访问其对象之外的逻辑是什么呢?难道不是在破坏封装吗?

2 个答案:

答案 0 :(得分:3)

作用域与对象无关,它与类有关。 private表示关联的关键字只能在同一类中访问,不能在同一对象中。实际上,“从同一对象内部可访问”几乎没有任何意义,因为您编写的是类而不是对象。

考虑一下,该规则(“可从同一对象内部访问”)在实际中会是什么样?什么意思编写代码时,不能将对象“置于”对象内部,而只能将其置于类内部。如果考虑到这一点,您会发现“在同一对象内”是一个不连贯的表达式。

答案 1 :(得分:1)

来自the language spec

  

私有类成员或构造函数只能在包含该成员或构造函数声明的顶级类(第7.6节)的正文中访问。

它在同一顶级类中,因此可以访问。