受保护的访问类型

时间:2012-08-08 14:17:46

标签: java subclass access-specifier

  

可能重复:
  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

  }

2 个答案:

答案 0 :(得分:8)

受保护的成员可以由类,包中的其他类以及其子类隐式访问。即,子类可以从其父级访问x

您可以访问this.x这一事实证明可以访问超类中的x。如果x在超类中属于私有,则this.x会出错。

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

答案 1 :(得分:1)

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

您当然可以像访问this.x一样访问继承的成员。