根据用户输入创建特定对象

时间:2015-05-04 04:16:42

标签: java subclass

所以我有3个子类(CatDogFish),我必须询问用户他们有多少宠物(n),宠物的类型和所有该宠物的信息(名称和年龄是超类的一部分,但每个子类有两个唯一的字段)。我的问题是如何将每个"宠物"并为它创建一个类对象。我显然有点卡住,任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

您可以使用工厂模式进行多态:

public abstract class Pet {
  private String name;
  private int age;

  protected Pet(String name, int age) {
    setName(name);
    setAge(age);
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getName() {
    return name;
  }

  public void setAge(int age) {
    this.age = age;
  }

  public int getAge() {
    return age;
  }
}

public class Dog extends Pet {
  public Dog(String name, int age, param3, param4) {
    super(name, age);
  }
}

public class Cat extends Pet {
  public Cat(String name, int age, param3, param4) {
    super(name, age);
  }
}

public class Fish extends Pet {
  public Fish(String name, int age, param3, param4) {
    super(name, age);
  }
}

public class PetFactory {
  public Pet newPet(String petType, String name, int age, param3, param4) throws IllegalArgumentException {
    if ("Dog".equalsIgnoreCase(petType))
      return new Dog(name, age, param3, param4);
    if ("Cat".equalsIgnoreCase(petType))
      return new Cat(name, age, param3, param4);
    if ("Fish".equalsIgnoreCase(petType))
      return new Fish(name, age, param3, param4);
    throw new IllegalArgumentException("Unknown pet: " + petType);
  }
}

答案 1 :(得分:0)

如果你有一个框架UI,你可以创建一个单选按钮组来选择宠物参数的类型和文本框(当然,你需要检查用户输入并给出反馈)。最好在标签上提供数据限制。 如果您使用控制台,为宠物选择,为用户提供在“猫”,“狗”,“鱼”等之间进行选择的机会。还提供您对其他参数的限制。控制他的意见并提供反馈。 有很多方法可以实现它,指明你的愿景。

答案 2 :(得分:0)

看一下decorator模式。

abstract class Pet {}
abstract class PetDecorator extends Pet {
    void initialize() {
        // read name and age from console
    }
}
class CatDecorator extends PetDecorator {
    @Override
    void initialize() {
        super.initialize();
        // read cat specific fields
    }
}
// other classes omited for brevity
// inside Main
List<Pet> readInfoAboutPets(int numberOfPets) {
    List<Pet> pets = new ArrayList<>(numberOfPets);
    for (int i = 0; i < numberOfPets; i++) {
        // read pet type from console
        switch (petType) {
            case "cat":
                PetDecorator petDecorator = new CatDecorator();
                petDecorator.initialize();
                pets.add(petDecorator);
                break;
            // case rest
        }
    }
    return pets;
}