与扫描仪的抽象类

时间:2015-09-27 03:23:02

标签: java abstract-class

我为CS项目制作游戏,其中一个要求是只有一个扫描仪供人类输入。如果我做一个抽象的课程"播放器"它有一个扫描仪对象,并创建两个" human"扩展"播放器"的课程,他们每个人都有自己的扫描仪,或者他们共享"播放器"扫描器?另外,当我结束游戏时,如何关闭扫描仪呢?

2 个答案:

答案 0 :(得分:1)

  

他们每个人都有自己的扫描仪或

如果只有Player班级有Scanner,则孩子不会自动拥有Scanner,除了孩子/其他班级可以访问。

  

他们是否共享“播放器”扫描仪?

直到您允许他们通过static访问权限或getter或任何方法访问扫描程序,才能直接访问扫描程序。

  

当我结束游戏时如何关闭扫描仪?

您可以在Player中声明可以为您执行此操作的方法。我想你只想在人类获胜之后关闭扫描仪。

此外,值得注意的是,如果您正在使用多线程内容,Scanner不是线程安全的。所以,我建议你最好为个人创建单独的Scanner,并在人类松开游戏后关闭它。

如果您从System.in获取输入,则应该有共同的Scanner,否则关闭一个Scanner会阻止所有其他Scanner的阅读。

您可以拥有单个Scanner实例,因为您可以使用Singleton设计模式。

abstract class Player {
   private static final Scanner scanner = new Scanner(System.in);

   public Scanner getScannerInstance() {
       return scanner; 
   }
}

答案 1 :(得分:1)

根据您的评论和您的问题,我知道您创建了一个Player抽象类和两个具体的Human类。而你实际上只想拥有一台扫描仪。

在这种情况下,您应该在ScannerPlayer中填写static字段。这样,您只能拥有Scanner一个实例。你应该添加一个吸气剂。我来告诉你代码:

public abstract class Player {
    private static Scanner scanner = new Scanner (System.in);

    public static Scanner getScanner () {
        return scanner;
    }
}

如果您想关闭扫描仪,请拨打close

Player.getScanner().close();

这不是直截了当的吗?

我不明白的另一件事是你为什么要创建一个抽象类?这是我的建议:让Player成为一个具体的类,只需创建两个Player个对象来代表两个玩家。我看到很多人都犯了这个错误。初学者通常喜欢创建类而不是对象。继承意味着“是一种”。另一方面,创建对象可以解释为“是一个”。因此,在您的情况下,Human 播放器,除非您希望计算机也可以播放。