我必须为学校编写一个基于文本的小型游戏,其中有一个玩家类和一个计算机类。在 Game 类中,我需要区分这两个类,以便仅当玩家不是计算机时我才能打印说明。
public class Player {
private String name;
public Player(String name) {
this.name = name;
}
}
public class Computer extends Player {
public Computer(String name) {
super(name);
}
}
我试过以下方法:
player1 = new Player;
if(player1.getClass() != Computer.class) {
System.out.println("Your turn, player 1.");
}
这应该打印“轮到你了,玩家 1”。因为播放器不是电脑,对吧?好吧,事实并非如此,否则我不知道该怎么做。
我试过 instanceof,但总是返回 true,因为 Computer 是 Player 的一个实例。
非常感谢您的帮助!
~大安
最佳答案
你可以用 instanceof 做到这一点:
if(!(player1 instanceof Computer))
...但这是一个糟糕的设计。由于计算机是一个玩家(继承),它们应该具有相同的能力(API)。一个非常简单的想法是让它们都使用 printGreeting() 方法实现 IPlayer 接口(interface):
public interface IPlayer {
void printGreeting();
}
public class Player implements IPlayer {
private String name;
public Player(String name) {
this.name = name;
}
public void printGreeting() {
system.out.println('Your turn! (or whatever)');
}
}
public class Computer extends Player {
public Computer(String name) {
super(name);
}
@Override
public void printGeeting() {
// NO-OP
}
}
关于java - 如何检查子对象是否来自特定类(而不是父类)(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21092532/