我正在使用 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.java、Warrior.java或Mage.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();
关于java - 为什么 "instanceof"不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37738875/