我有一个叫做英雄的普通班级和三个扩展它的子类:法师,战士,游侠。英雄类有健康和力量,每个子类都有其他属性。如何将子类转换为超类[无法转换]?
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 =(整数)对象;”。所以我很困惑,为什么我的英雄战士不能被铸造成英雄对象。
类'战士'应该延伸'这里' –
把这个类的代码:'法师','战士','游侠' –
*“我的勇士是英雄不能铸造到英雄对象”*你没有战士,你有一个任意的英雄实例,你不能也不应该尝试执行一个沮丧。如果你不想成为一名战士,那么创建一个,而不是创建一个英雄的实例并投射。 – Tom