为什么“instanceof”不起作用?

Dra*_*eel 5 java oop polymorphism instanceof aggregation

我正在使用 Java instanceof,但它似乎不起作用。

我有三个扩展 Hero 类的 Java 类。
Hero.java类:

public abstract class Hero {

    protected int health;

    public Hero() { 
    }
}
Run Code Online (Sandbox Code Playgroud)

其他三类

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

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

public class Warrior extends Hero {
    public Warrior() {
    }
}
Run Code Online (Sandbox Code Playgroud)

我有这个主类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();
    }

}
Run Code Online (Sandbox Code Playgroud)

实例化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");
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

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

Ell*_*sch 3

因为你的常数是null. 当你说,

\n\n
private Archer archer;\n
Run Code Online (Sandbox Code Playgroud)\n\n

它相当于

\n\n
private Archer archer = null;\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
private static final Hero archer = new Archer();\nprivate static final Hero mage = new Mage();\nprivate static final Hero warrior = new Warrior();\n
Run Code Online (Sandbox Code Playgroud)\n\n

另请参见\xe2\x80\x9c 编程到接口\xe2\x80\x9d 是什么意思?

\n