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;
}
答案 0 :(得分:1)
这是由于实例变量隐藏。由于您已在子类中声明了另一个具有相同名称的变量height
,因此它隐藏了超类中定义的变量。因此,当您使用this.height
访问变量时,将为您提供在子类中定义的height
的值,您根本没有设置它。
电话:
this.setHeight(5);
调用超类的方法,它在超类本身设置高度,而
System.out.println(this.height);
正在访问height
中定义的RectangleEx
,而不是Rectangle
,它仍为0.
如果要访问超类的height
,请在超类中定义 getter ,这将返回超类变量。