3

可能重复:
在 Java 中,公共、默认、受保护和私有之间有什么区别?

为什么一个包中的子类不能通过超类的引用访问它的超类(在另一个包中)的受保护成员?我正在努力解决这一点。请帮我

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

  }
4

2 回答 2

8

受保护的成员可以被类、包中的其他类以及它的子类隐式访问。即,子类可以x从它自己的父类访问。

您能够访问的this.x事实证明x从超类是可访问的。如果x在超类中是私有的,this.x则会出错。

当您说p.x您正在尝试访问其他实例x时,而不是在它自己的层次结构中。这在包装之外是不允许的。

于 2012-08-08T14:20:35.190 回答
1

因为您引用了不同实例的成员Point。这是不允许的。

您当然可以像使用this.x.

于 2012-08-08T14:20:33.143 回答