Java 子类集合方法不工作
有谁能告诉我,为什么在使用第二个构造函数创建新的矩形时,它的高度是0而不是5?这是超类中setHeight的代码:Java 子类集合方法不工作,java,inheritance,Java,Inheritance,有谁能告诉我,为什么在使用第二个构造函数创建新的矩形时,它的高度是0而不是5?这是超类中setHeight的代码: public class RectangleEx extends Rectangle { int height =0; int width=0; public RectangleEx(int height, int width) { super(height,width); } public RectangleEx
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);
}
}
这是由于实例变量隐藏造成的。由于在子类中声明了另一个同名变量
height
,因此它隐藏了在超类中定义的变量。因此,当您使用this.height
访问变量时,将得到子类中定义的height
的值,您根本没有设置该值
电话:
public void setHeight(int height)
{
this.height = height;
}
调用super类的方法,该方法在super类本身中设置高度,而
this.setHeight(5);
正在访问矩形
中定义的高度
,而不是矩形
,该高度仍然为0
如果要访问super类的
高度
,请在super类中定义一个getter,它将返回super类变量。来自super类的高度
与来自继承类的高度不同。@damo。我认为那样不行。在私有变量的情况下,甚至不考虑成员隐藏,因为它们在类外甚至不可见。隐藏适用于公共、受保护或包私有变量。请稍候。。。当我这样做的时候。setHeight(5),我将超类的高度设置为5?但我甚至还没有定义属于超类的对象!我很困惑。我认为子类的对象继承了set方法,子类对象可以用这个方法引用自己…@BenjaminLindqvist。如果您在超类中定义了setHeight
方法,而不是在子类中,那么只有这个方法有效。因为这样子类方法将被调用。但是我在这里使用这个.setHeight()来设置哪个对象的高度呢?这个物体似乎不存在@本杰明林克维斯特。您在哪里定义了setHeight
方法?如果仅在super类中定义,则将调用super类方法。如果在子类中重写了setHeight
方法,则将调用子类方法。
System.out.println(this.height);