, пытаясь получить представление о полиморфизме и наследовании, я сделал небольшую программу, чтобы продемонстрировать эти темы. Программа состоит из суперкласса «Дерево» и трех подклассов «Береза», «Клен» и «Дуб». Конструктор дерева делает это так, чтобы все деревья начинались с высоты 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 для проращивания().
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); – Rudy
okay @ElliottFrisch, я отправил код для дерева –