Java 从子类访问和修改超类的属性?

Java 从子类访问和修改超类的属性?,java,inheritance,polymorphism,subclass,superclass,Java,Inheritance,Polymorphism,Subclass,Superclass,在试图掌握多态性和继承性的同时,我制作了一个小程序来演示这些主题。该程序由一个超类“Tree”和三个子类“Birch”、“Maple”和“Oak”组成。树的构造器使所有树都以20和200片叶子的高度开始。在树中,我有一个名为grow()的抽象方法 下面是树的代码: public abstract class Tree { private int height; private int numberOfLeaves; public Tree() { height = 20; nu

在试图掌握多态性和继承性的同时,我制作了一个小程序来演示这些主题。该程序由一个超类“Tree”和三个子类“Birch”、“Maple”和“Oak”组成。树的构造器使所有树都以20和200片叶子的高度开始。在树中,我有一个名为grow()的抽象方法

下面是树的代码:

public abstract class Tree {
private int height;
private int numberOfLeaves;

public Tree()
{
    height = 20;
    numberOfLeaves = 200;
}
public Tree(int aheight, int anum)
{
    height = aheight;
    numberOfLeaves = anum;
}

public int getHeight()
{
    return height;
}

public int getNumberOfLeaves()
{
    return numberOfLeaves;
}

public void setNumberOfLeaves(int anum)
{
    numberOfLeaves = anum;
}
public abstract String getType();

public void setHeight(int aheight)
{
    height = aheight;
}

public abstract void grow();
}

下面是Birch for grow()的代码

然而,当我调用代码使一组树生长时,它们的高度或叶子数都不会改变。 下面是我用来填充树数组的代码(我是手动完成的):

显然,超类中的值没有被修改。任何帮助都将不胜感激!谢谢

此代码:

int height = super.getHeight();
super.setHeight(height++);
不会更改任何内容,因为在调用
super.setHeight()
之后将出现
height
的增量。因此,您只需将高度设置为其当前值。

将代码更改为:

int height = super.getHeight();
super.setHeight(++height); 
请注意,您不需要调用super.method()。只要该方法受到保护(公共性更好),您就可以将其简化为:

int height = getHeight();
setHeight(++height);
你只叫超级。如果您在子类中再次实现该方法,并且希望专门调用父类,通常可以在调用父构造函数的构造函数中看到父类

还有一件事:你的访问者需要改变一点只是为了预先警告的情况。请参阅下面的代码。通常您的IDE应该支持自动生成访问器

    public int getHeight() {
    return height;
    }

    public void setHeight(int height) {
    this.height = height;

    }

您可以发布
树的代码吗?
?尽管它仍然取决于树类的编写方式,但请尝试super.setHeight(++height);好的@ElliottFrisch,我发布了树的代码你的树代码看起来还可以。告诉我们你是如何填充Trearray的。@Rudy事实上,我是手动填充Trearray的。我只是简单地做了trearray.add(new Birch()),即使在将height上的操作符更改为pre increment之后,它仍然没有更改值;主要功能仍然是将高度保持在20I,只是将代码放在树上。除了构造器的名称和它在grow()中增加的叶子数之外,Oak的编写方式几乎与Birch和maple完全相同。演示如何填充Trearray
int height = super.getHeight();
super.setHeight(++height); 
int height = getHeight();
setHeight(++height);
    public int getHeight() {
    return height;
    }

    public void setHeight(int height) {
    this.height = height;

    }