【问题标题】:Manage all abstract methods管理所有抽象方法
【发布时间】:2018-02-01 02:16:42
【问题描述】:

我创建了一个名为 Creature 的抽象类和两个扩展名为 Human 和 Dog 的 Creature 的类。还有一些方法,比如getAge和setAge,你可以看到:

public abstract class Creature {
    public abstract void born(String name);
    public abstract void setName(String name);
    public abstract void setAge(int age);
    public abstract int getAge();
    public abstract String getName();
}

public class Human extends Creature {
    private String name;
    private int age;

    public void born(String name){
        setName(name);
        setAge(0);
    }

// getters and setters
}


public class Dog extends Creature {
    private String name;
    private int age;

    public void born(String name){
        setName(name);
        setAge(0);
    }

// getters and setters
}

然后我做了这个:

private static Creature creature;

String string = new Random().nextInt(2) == 1 ? "Human" : "Dog";
    if (string.equals("Human")) {
        setCreature(new Human());
    } else {
        setCreature(new Dog());
    }
    for (int i = 0; i < 5; i++) {
        creature.born("Name" + i);
    // here are born 5 creatures
    }
    // after one year get all creatures and set their age +1

我的问题是,我怎样才能让所有生物出生并在一年后将它们的年龄设置为 +1?

【问题讨论】:

  • 您对一年的定义是什么?您想使用调度程序增加年龄字段吗?
  • 你想在没有坚持的情况下达到你的目标吗?
  • 不,我只是想让所有的生物都出生,然后用另一种方法立即增加它们的年龄。
  • 你可以稍微反思一下,并管理你的代码以避免代码重复,因为getetr abd setter是相同的,并且可能在父类中
  • 你认为你在那个 for 循环中创造了多少生物?

标签: java abstract extends


【解决方案1】:

我假设 setCreature 在一种列表中添加了一个新生物

您只需遍历列表并增加年龄,而无需关注生物的类型

for(Creature c : creatures){
  c.setAge(c.getAge() +1 );
}

【讨论】:

  • 我不想在列表中添加生物类,我只想获取所有在 for 循环中出生的生物。
  • 那么如果不在列表或其他存储容器中,您如何存储您的生物?您需要跟踪他们,否则无法增加他们的年龄或获得他们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 2020-03-21
  • 2021-09-17
  • 2011-07-10
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多