我有一个名为英雄的通用类和扩展它的三个子类:法师、战士、游侠。英雄类别具有生命值和力量,每个子类别都有额外的属性。
public class Warrior extends Hero {
private int armor;
public Warrior(int health, int strength, int armor) {
super(health,strength);
this.armor = armor;
}
}
public class Hero {
private int health;
private int strength;
public Hero(int health, int strength) {
this.health = health;
this.strength = strength;
}
//Getters
public int getHealth() {
return health;
}
public int strength() {
return strength;
}
//Setters
public void takeDamage(Hero player, int n) {
player.health = player.health-n;
}
public void healDamage(Hero player, int n) {
player.health = player.health+n;
}
}
在主类中,我试图创建两个英雄对象,当用户选择他们想要成为的类时,我想创建该英雄类并将其转换为英雄,这样它也将具有英雄属性和方法.
public static void main(String[] args) {
Hero hero1 = new Hero(100,10);
Hero hero2 = new Hero(100,10);
//Players select the class
Scanner scanner = new Scanner(System.in);
System.out.println("Player select a class: Warrior, Mage, Ranger ");
String p = scanner.next();
switch (p) {
case "Warrior": Warrior h1 = (Hero)hero1; //this doesn't work
break;
case "Mage":
break;
case "Ranger":
break;
}
}
我环顾四周,在一个示例中我有点理解对象如何可以是整数,并且您可以执行“int i = (Integer) object;”。所以我很困惑为什么我的英雄战士不能被类型转换成英雄对象。
最佳答案
这里:
英雄 Hero1 = new Hero(100,10);
您是说 hero1
是一个 Hero
这里:
战士 h1 = (英雄)hero1
您试图说 hero1
是一个 Warrior
,但事实并非如此。这是一个英雄
。
以下是关键:所有 Warrior
实例都是 Hero
实例,但并非所有 Hero
实例都是 Warrior
>。
为了将 hero1
转换为 Warrior
,必须将其创建为 Warrior
。例如
英雄 Hero1 = new Warrior(100,10);
关于java - 如何将子类转换为父类(super class)[无法转换]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41752354/