访问私有字段没有getter方法?

时间:2014-01-30 09:13:46

标签: java

以下是JDK7源代码的摘录:

public String(String original) {
    this.value = original.value;
    this.hash = original.hash;
}

valuehash都是private字段。为什么original.value合法?

6 个答案:

答案 0 :(得分:7)

请参阅this table

                   Access Levels
Modifier     | Class  | Package   |  Subclass | World
-------------+--------+-----------+-----------+--------
public       |   Y    |     Y     |     Y     |   Y
protected    |   Y    |     Y     |     Y     |   N
no modifier  |   Y    |     Y     |     N     |   N
private      |   Y  ← |     N     |     N     |   N    

答案 1 :(得分:2)

访问修饰符描述的访问权限,而非实例。由于valueString类中声明,因此其所有成员(如构造函数)都可以无限制地访问它。

答案 2 :(得分:1)

一个类可以访问自己的私有字段(甚至可以访问除this之外的其他实例)。

答案 3 :(得分:1)

Both value and hash are private filed. Why is original.value legal?

因为它仍然在String类中,并且可以使用相同的类访问私有变量。

答案 4 :(得分:1)

您应该真正查看访问控制表

Modifier    Class   Package Subclass    World
---------------------------------------------

private     **Y**      N        N           N

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

  

private修饰符指定只能在自己的类中访问该成员。

因为在课堂上你可以访问它。

答案 5 :(得分:0)

Getters和setter实际上是在类的范围之外实现的。 在类中,可以不受任何限制地访问任何变量。