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 に答える