【发布时间】:2016-10-10 20:51:10
【问题描述】:
我正在使用 Java instanceof,但它似乎不起作用。
我有 三个 扩展 Hero 类的 java 类。
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 中,代码用于检查 selectedHero 是否是 Archer.java、Warrior.java 或Mage.java,但我的结果是 “你没有选择任何东西”。为什么 instanceof 无法检查我是否已在 WelcomeScreen 中将其分配给 Archer.java?
【问题讨论】:
-
archer 变量为空。 -- 你在哪里打电话给
new Archer()? -
你会想要学习使用调试器,然后练习使用它。同样大量使用
instanceof的结构会散发出代码气味,应该避免。 -
@HovercraftFullOfEels 嗯...好吧...闻起来是什么味道?
-
@RobotKarel314:我不知道,因为我从来没有近距离闻过它,但我知道它是not a good smell。
标签: java oop polymorphism aggregation instanceof