java - 为什么 "instanceof"不工作?

标签 java oop polymorphism aggregation instanceof

我正在使用 Java instanceof,但它似乎无法正常工作。

我有三个 java 类扩展了一个 Hero 类。
Hero.java 类:

public abstract class Hero {

    protected int health;

    public Hero() { 
    }
}

其他三个类:

public class Archer extends Hero {
    public Archer() {
    }
}

public class Mage extends Hero {
    public Mage() {
    }
}

public class Warrior extends Hero {
    public Warrior() {
    }
}

我有这个主类 WelcomeScreen.java

public class WelcomeScreen {

    private Archer archer;
    private Mage mage;
    private Warrior warrior;
    private Hero hero;

public WelcomeScreen() {

        // choose a hero (archer/mage/warrior)
        hero = archer;
        new Game(hero);
    }

    public static void main(String args[]) {
        new WelcomeScreen();
    }

}

实例化 Game.java

public class Game {

    public Game(Hero chosenHero) {

        if (chosenHero instanceof Mage) {
            System.out.println("you selected mage");
        } else if (chosenHero instanceof Archer) {
            System.out.println("you selected archer");
        } else if (chosenHero instanceof Warrior) {
            System.out.println("you selected warrior");
        } else {
            System.out.println("you selected NOTHING");
        }
    }

}

Game.java中,代码是为了检查chosenHero是否是Archer.javaWarrior.javaMage.java,但我的结果是“你什么都没有选择”。为什么 instanceof 无法检查我是否已在 WelcomeScreen 中将其分配给 Archer.java

最佳答案

因为你的常量是null。当你说,

private Archer archer;

相当于

private Archer archer = null;

此外,您还为每个实例创建了三个字段。我想你想做类似的事情

private static final Hero archer = new Archer();
private static final Hero mage = new Mage();
private static final Hero warrior = new Warrior();

另见 What does it mean to “program to an interface”?

关于java - 为什么 "instanceof"不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37738875/

相关文章:

python - Python3 中的 Easy_Install 表示即使是最新的,也找不到 setuptools

python - 实现两个构造函数的最pythonic方式

Java多态处理: Incorrect output?

java - 在 JPA 中使用相同的实体键映射多个 HashMap

java - 似乎无法正确打印我的代码

java - android中的面向切面编程

Java 枚举单独的类

javascript - 如何在 Javascript 中创建类?

java - 将物体掉落在地板上

polymorphism - OCaml 中的空树类型