0
public class RectangleEx extends Rectangle
{
    int height =0;
    int width=0;

    public RectangleEx(int height, int width)
    {
        super(height,width);
    }

    public RectangleEx()
    {
        super(0,0);
        this.setHeight(5);
        System.out.println(this.height);
    }
}

2 番目のコンストラクターを使用して新しい RectangleEx を作成するときに、その高さが 5 ではなく 0 である理由を誰か教えてもらえますか? これは、スーパークラスの setHeight のコードです。

public void setHeight(int height)
{
    this.height = height;
}
4

1 に答える 1

1

これは、インスタンス変数の隠蔽によるものです。サブクラスで同じ名前の別の変数を宣言しheightたため、スーパー クラスで定義されている変数が非表示になります。したがって、 を使用して変数にアクセスすると、まったく設定していないサブクラスthis.heightで定義された の値が得られます。height

呼び出し:

this.setHeight(5); 

スーパークラス自体で高さを設定するスーパークラスのメソッドを呼び出しますが、

System.out.println(this.height);

まだ 0 であるではなく、height定義された in にアクセスしています。RectangleExRectangle

スーパー クラスの にアクセスする場合は、スーパー クラス変数を返すゲッターheightをスーパークラスで定義します。

于 2013-07-03T21:35:53.913 に答える