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.java、Warrior.java或Mage.java的对象,但我的结果是“你没有选择”。为什么instanceof无法检查我是否已将它分配给WelcomeScreen 中的Archer.java?
因为你的常数是null. 当你说,
private Archer archer;\nRun Code Online (Sandbox Code Playgroud)\n\n它相当于
\n\nprivate Archer archer = null;\nRun Code Online (Sandbox Code Playgroud)\n\n此外,您还为每个实例创建了三个字段。我想你想做类似的事情
\n\nprivate static final Hero archer = new Archer();\nprivate static final Hero mage = new Mage();\nprivate static final Hero warrior = new Warrior();\nRun Code Online (Sandbox Code Playgroud)\n\n另请参见\xe2\x80\x9c 编程到接口\xe2\x80\x9d 是什么意思?
\n