最近,我决定看一下Java,因此我仍然对它以及面向对象编程的方法还很陌生,因此我想在学习更多之前弄清楚一些事情((我想从好的实践开始永远不会很快) )。
我现在正在编写一个2D小游戏,但我想我的问题适用于任何非平凡的项目。为简单起见,我将提供游戏示例。
我有不同类型的僵尸,但是它们都有相同的属性(x,y,健康,攻击等),因此我编写了一个 界面 僵尸,由WalkingZombie,RunningZombie TeleportingZombie等实现。这是最好的做法吗?我最好选择 抽象类吗? 还是拥有 超一流的 ?(我不打算部分实现功能-因此,我选择使用 接口 而不是 抽象类 )
我有一类描述主要角色(幸存者),并且由于它很大,我想编写一个具有不同功能的界面,以便我可以轻松地看到并共享它的结构。这是好习惯吗?还是仅仅是浪费时间和空间?
我希望这个问题不会被认为是主观的,因为我认为有经验的程序员不会对此主题表示异议,因为使用接口/超类/抽象类遵循逻辑规则,因此不只是个人选择。
您可以将接口视为“合同”。您正在定义实现该接口的类必须实现的一组方法。
另一方面,当您拥有一些您可能要实现的所有子类通用的代码时,将使用抽象类。因此,您可能有一个名为Shape的抽象类,该类具有一些通用代码,而在派生类(圆形,正方形等)中,您可能具有特定于这些形状的代码(getArea将作为示例)。但是颜色之类的东西可能对所有形状都是通用的,因此您可以getColor在Shape抽象类中放置一个方法。
getArea
getColor
您可以将两个想法结合起来。您可以具有实现接口的抽象类,这可以使您两全其美。
这些概念在OO中反复使用,因此理解它们很重要。您似乎过得很好:)。
因此,如果您的僵尸类具有适用于所有类型的僵尸的某些常见行为,那么听起来很适合成为抽象类。GameCharacter如果您的游戏中还有其他角色(也许UndeadMice是什么),您也可以考虑创建一个界面(也许是一个界面)。然后,您的Zombie抽象类和UndeadMouse抽象类将实现该GameCharacter接口。
GameCharacter
UndeadMice
Zombie
UndeadMouse