【发布时间】:2013-12-12 15:08:24
【问题描述】:
在尝试掌握多态性和继承时,我编写了一个小程序来演示这些主题。该程序由一个超类“Tree”和三个子类“Birch”、“Maple”和“Oak”组成。 Tree 的构造函数使得所有的树都以 20 和 200 片叶子的高度开始。在 Tree 中,我有一个名为 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 中用于 grow() 的代码。
public void grow()
{
int height = super.getHeight();
super.setHeight(height++);
int num = super.getNumberOfLeaves();
super.setNumberOfLeaves(num+=30);
System.out.println("The Birch is Growing...");
}
但是,当我调用代码让树数组生长时,它们的高度或叶子数量都不会改变。 这是我用来填充树数组的代码(我手动完成的):
ArrayList<Tree> treeArray = new ArrayList<Tree>();
treeArray.add( new Oak());
treeArray.add(new Birch());
treeArray.add(new Maple());
这是我用来调用增长的代码:
for (Tree tree : treeArray)
{
tree.grow();
System.out.println("The " + tree.getType() + "'s height is " + tree.getHeight() + " and it's number of leaves is "+ tree.getNumberOfLeaves() +".");
}
显然,超类中的值没有被修改。任何帮助将不胜感激!谢谢!
【问题讨论】:
-
你能把
Tree的代码贴出来吗? -
虽然还是要看树类是怎么写的,试试 super.setHeight(++height);
-
好的@ElliottFrisch,我发布了树的代码
-
您的树代码似乎没问题。向我们展示如何填充 treeArray。
-
@Rudy 事实上,我手动填充了 treeArray。我只是做了 treeArray.add(new Birch())
标签: java inheritance polymorphism subclass superclass