java - 如何将子类转换为父类(super class)[无法转换]?

标签 java inheritance casting subclass superclass

我有一个名为英雄的通用类和扩展它的三个子类:法师、战士、游侠。英雄类别具有生命值和力量,每个子类别都有额外的属性。

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/

相关文章:

java - 如何测试存储在 double 中的值是否适合 long? (四舍五入是,但截断否)

java - 加载位于加载器内的 Java 代理 JAR

c++ - 访问另一个子类中基类的 protected 成员

javascript - 如何扩展javascript类

postgresql - 使用 Postgres 在 HugSQL 或 YesSQL 中转换多个值

c - 什么时候允许类型转换指针?

java - 区分对 Java Spring 后端的 Web 和 native 应用程序请求

java - OSGI - 处理 bundle 所需的第 3 方 JAR

java - Netbeans 建议的 String[][]::new 是什么意思?

python - 如何在多重继承中使用命名元组