java - 对于这个项目来说,扩展还是继承更好?

标签 java inheritance

我不太清楚 Java 中的抽象类或接口(interface)是什么,所以请耐心等待。我正在编写一个国际象棋游戏,并且我有一个类(class) Piece以及每种类型的作品的子类,即。 Knight , Rook , Pawn我希望我的 Piece 类中的方法能够继承到每个子类中,有些不需要在子类中编写新代码(即“getX()”方法),而有些则需要新代码(每个部分都有一个“checkValidMove”)。

我目前正在为每个子类扩展 Piece 类,但在我继续之前,我想知道这是否是编写代码的最佳方法,然后我才意识到我应该以不同的方式编写代码。

最佳答案

听起来好像您在询问何时子类化以及何时实现接口(interface)。

一般来说,如果您控制着类层次结构并且不打算让其他人使用它,那么您将创建一个子类层次结构。这允许您使用父类中的代码 - 这正是您想要的; Knight 类应该从 Piece 类继承代码,这样 Knight 就可以做 Piece 可以做的任何事情。 (简而言之:骑士扩展了棋子。)

如果您想允许其他人使用您的类(例如,如果您提供一个库),您可能需要使用接口(interface)。接口(interface)中的所有方法都是抽象的,这意味着实现该接口(interface)的类必须实现这些方法。例如,您可能有一个知道如何输出图形和输出文本的打印机接口(interface) - 每个单独的打印机都会以不同的方式实现该接口(interface)(并且可能由不同的人或公司实现),但如果它们实现了打印机接口(interface),则任何了解该接口(interface)的程序都可以使用它们。 (简而言之:BrotherPrinter 实现 Printer、HPPrinter 实现 Printer 等)

关于java - 对于这个项目来说,扩展还是继承更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36269310/

相关文章:

java - 尝试对对象数组进行二分搜索 [比较器]

java - eclipse PDE : Custom QuickFix only available in Problems View?

java - 使用 Actors 向 Akka websockets 发送数据

java - JRuby:如果运行时间太长,请关闭 runScriptlet?

python - 如何继承查询MongoEngine文档?

java - Hibernate 分页查询使用 DB2/400 方言不返回任何记录

python - 为什么重写 __iter__ 会抛出 RecursionError?

c# - 做继承权

c++ - 继承构造函数的字符和访问级别

c# - 我应该多积极地进行子类化以保持 DRY?