java - 制作三个轻度相关类的数组

标签 java arrays inheritance interface

我正在为我的 AP 计算机科学项目使用 Java 制作一个游戏。它是在游戏板上玩的,游戏板上有边界、内部空间,然后是一种特殊类型的内部空间。这三者各不相同,并且各自具有独特的行为,但它们都是相互关联的,就像它们都在游戏板上一样。

一旦空间被制作出来,它们就会保持不变——角色将处理所有的移动和适合他们所在空间的适当行为。

目标是将所有这些都放在一个二维数组中,我不确定如何最好地实现它。我考虑了以下几点

  1. 使用空或接近空的接口(interface)或抽象类,其中常规空间和特殊空间继承自抽象空间类,并且空间类和边界类都实现该接口(interface)或扩展父抽象类
  2. 将它们全部声明为同一类型,并根据其类型定义不同的行为。
  3. 使其成为一个二维数组列表,类型为Object

所有这些看起来都有点老套。处理这个问题的适当方法是什么?

最佳答案

#1 绝对应该是您的首选,而且它一点也不黑客。我可能会选择某种名为 BoardSquare 或其他名称的抽象类,并让所有内容都继承自该类。

类接近空,甚至空的事实本质上并不是坏事(尽管如果类是空的,它实际上应该是一个接口(interface))。 Java 8 中 lambda 实现背后的主要动机之一是类/接口(interface)只是一个函数的包装器(考虑 comparatorcloseable )。而且,谁说它应该是空的?我可以想到一些潜在的常见方法:Square.moveTo()moveFrom()actOn()convert()status() toString()等。

#2 和 #3 可以工作,并且在技术上并不黑客,但它们使您的代码很难维护/升级。添加新的方形类型时会发生什么?当你想改变一个人的行为而不是其他人的行为时会发生什么?等等

关于java - 制作三个轻度相关类的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23771458/

相关文章:

c# - 当基类没有定义构造函数时如何重写方法

java - 具有相同 PK 的 2 个插入为何会成功?如何更新重复的 key ?

c - C中简单平均计算的错误值输出

java - 对数组元素进行算术运算

Java子类化: what is the method that will get triggered?

php - 如何确定方法是继承的、重新定义的还是新的 (PHP)

java - 将 urlconnection 文件从 App Engine java 保存到 Google 云存储

java - 如何在 android imageview 中显示 SVG 图像

带有 super 关键字的 Java 泛型方法

javascript - IF/ELSE 破坏了 javascript 和 JSON 交互的逻辑