以下是JDK7源代码的摘录:
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
value
和hash
都是private
字段。为什么original.value
合法?
答案 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)
访问修饰符描述类的访问权限,而非实例。由于value
在String
类中声明,因此其所有成员(如构造函数)都可以无限制地访问它。
答案 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实际上是在类的范围之外实现的。 在类中,可以不受任何限制地访问任何变量。