子类set-method无法正常工作

时间:2013-07-03 21:33:28

标签: java inheritance

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

1 个答案:

答案 0 :(得分:1)

这是由于实例变量隐藏。由于您已在子类中声明了另一个具有相同名称的变量height,因此它隐藏了超类中定义的变量。因此,当您使用this.height访问变量时,将为您提供在子类中定义的height的值,您根本没有设置它。

电话:

this.setHeight(5); 

调用超类的方法,它在超类本身设置高度,而

System.out.println(this.height);

正在访问height中定义的RectangleEx,而不是Rectangle,它仍为0.

如果要访问超类的height,请在超类中定义 getter ,这将返回超类变量。