我目前正在学习java和oop。 当我必须根据条件实例化一个新对象时,我遇到了问题。每个对象具有相同的类型。 根据具体情况,我想通过我的对象玩家动物和动物护法来让他们战斗。 (这是一个遇到野蛮人口袋妖怪的玩家)。
switch (animalChosen) {
case "Chien":
Animaux playerChien = new Chien(animalName);
playerChien.displayStat();
break;
case "Chat":
Animaux playerChat = new Chat(animalName);
playerChat.displayStat();
break;
case "Furet":
Animaux playerFuret = new Furet(animalName);
playerFuret.displayStat();
break;
default
break;
}
switch (randAnimalSauvage()) {
case "Chien":
Animaux chienSauvage = new Chien();
chienSauvage.displayStat();
break;
case "Chat":
Animaux chatSauvage = new Chat();
chatSauvage.displayStat();
break;
case "Furet":
Animaux furetSauvage = new Furet();
furetSauvage.displayStat();
break;
default:
break;
}
Fight letsFight = new Fight(Animaux playerAnimal, Animaux animalSauvage);
letsFight.battle(Animaux playerAnimal, Animaux animalSauvage);
PS:我是法国人,不记得变量名的含义;)
提前致谢
答案 0 :(得分:1)
你可以做到
Animal animal= null;
switch (animalChosen) {
case "Chien":
animal = new Chien(animalName);
break;
case "Chat":
animal = new Chat(animalName);
break;
case "Furet":
animal = new Furet(animalName);
break;
default
break;
}
animal.displayStat();
这是有效的,因为(我认为,这就是必要的情况)所有Chien
,Chat
和Furet
都是{{1}的子类(或实现接口,无论它是什么)。
敌人的动物也一样。由于两种情况都相同,因此您只需创建一个函数。
Animal
然后会像这样调用:
private Animal byName(String animalName) {
// same code as above, returning the animal
return animal;
}
答案 1 :(得分:0)
Animaux chosenPlayerAnimal;
switch (animalChosen) {
case "Chien":
chosenPlayerAnimal = new Chien(animalName);
break;
case "Chat":
chosenPlayerAnimal = new Chat(animalName);
break;
case "Furet":
chosenPlayerAnimal = new Furet(animalName);
break;
default:
chosenPlayerAnimal = new SomeDefaultAnimal(animalName);
break;
}
Animaux animalSauvage;
switch (randAnimalSauvage()) {
case "Chien":
animalSauvage = new Chien();
break;
case "Chat":
animalSauvage = new Chat();
break;
case "Furet":
animalSauvage = new Furet();
break;
default:
animalSauvage = SomeDefaultAnimal();
break;
}
chosenPlayerAnimal.displayStat();
animalSauvage.displayStat();
Fight letsFight = new Fight(chosenPlayerAnimal, animalSauvage);
letsFight.battle(chosenPlayerAnimal, animalSauvage);
我真的不明白你为什么要用你在构造函数中提供的动物调用Fight.battle()
。