Java 子类集合方法不工作

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

有谁能告诉我,为什么在使用第二个构造函数创建新的矩形时,它的高度是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()
    {
        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);