java - 如何检查子对象是否来自特定类(而不是父类)(Java)

标签 java class object

我必须为学校编写一个基于文本的小型游戏,其中有一个玩家类和一个计算机类。在 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/

相关文章:

javascript - 如何在 JavaScript 中为对象值添加标签

javascript - 如何从数组中删除对象并保存以供以后使用?

java - Spring Jedis 连接未返回池

java - 创建一个独立的jar文件

java - 如何捕获算术异常

java - 使用 java beans/command/java class 和 getter setter 几乎每个地方都相同是很好的实践

继承

class - 结构中的私有(private)类

Java通过套接字发送字节[]...读取的长度错误

sql - 我们可以在同一模式中创建具有相同名称的同义词吗