可能重复:
In Java, what's the difference between public, default, protected, and private?
为什么一个包中的子类不能通过超类的引用访问它的超类(在另一个包中)的受保护成员?我正在努力解决这个问题 点。请帮帮我
package points;
public class Point {
protected int x, y;
}
package threePoint;
import points.Point;
public class Point3d extends Point {
protected int z;
public void delta(Point p) {
p.x += this.x; // compile-time error: cannot access p.x
p.y += this.y; // compile-time error: cannot access p.y
}
答案 0 :(得分:8)
受保护的成员可以由类,包中的其他类以及其子类隐式访问。即,子类可以从其父级访问x
。
您可以访问this.x
这一事实证明可以访问超类中的x
。如果x
在超类中属于私有,则this.x
会出错。
当您说p.x
时,您试图访问其他实例的x
,而不是在其自己的层次结构中。包装外不允许这样做。
答案 1 :(得分:1)
因为您引用了{em>不同 Point
实例的成员。这是不允许的。
您当然可以像访问this.x
一样访问继承的成员。