我有一个叫做英雄的通用类和三个扩展它的子类:法师,勇士,游侠。英雄类有生命力和力量,每个子类都有额外的属性。
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;“。所以我很困惑,为什么我的英雄战士不能被施展成英雄对象。
发布于 2017-01-20 05:56:51
这里:
Hero hero1 = new Hero(100,10);
你是说hero1是一个Hero
这里:
Warrior h1 = (Hero)hero1
您试图说hero1是一个Warrior,但它不是。这是个Hero。
关键是:所有Warrior实例都是Hero实例,但并非所有Hero实例都是Warrior。
为了将hero1转换为Warrior,必须将其创建为Warrior。例如:
Hero hero1 = new Warrior(100,10);
发布于 2017-01-20 06:13:13
我相信你下面所说的是一个误解:
...我想创建那个hero类,并将其转换为hero,这样它也将具有hero属性和方法。
子类总是有它们的超类的属性。因此,在这种情况下,如果Warrior是Hero的子类,那么Warrior将拥有Hero拥有的所有属性和方法,因此您实际上不需要“将子类转换为超类”。从来没有这样的需要。
在这个特定的示例中,您可能想要编写以下代码
Hero hero1 = new Hero(100 /* health */,10 /* strength */);
. . .
case "Warrior":
Hero h1 = hero1;
break;或者这个
Hero warrior1 = new Warrior(100 /* health */
,10 /* strength */
,20 /* armor */);
. . .
case "Warrior":
Hero h1 = warrior1 ;
break;或者甚至是这个
Warrior warrior1 = new Warrior(100 /* health */
,10 /* strength */
,20 /* armor */);
. . .
case "Warrior":
Hero h1 = warrior1 ;
break;哪一个更合适?这取决于您的实际情况(例如,您真的希望对象是Hero还是Warrior)。
https://stackoverflow.com/questions/41752354
复制相似问题