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);
    }
}

谁能告诉我为什么在使用第二个构造函数创建一个新的 RectangleEx 时,它的高度是 0 而不是 5?这是超类中 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);

正在访问height定义的 inRectangleEx而不是Rectangle,它仍然是 0。

如果你想访问height超类,在超类中定义一个getter,它将返回超类变量。

于 2013-07-03T21:35:53.913 回答