受保护的访问类型

3

可能是重复问题:
在Java中,public、default、protected和private有什么区别?

为什么一个包中的子类不能通过超类的引用访问它的超类(位于另一个包中)的protected成员?我正为这一点而苦苦挣扎。请帮助我。

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个回答

8

受保护成员可以被该类、包中其他类以及其子类隐式访问。也就是说,子类可以从其父类访问x

如果您能访问this.x,则说明可以访问超类中的x。如果在超类中x为私有,则this.x会出现错误。

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


1

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接