Java的使用 [接口/抽象类]

2022-09-01 19:15:28

最近我决定看看Java,所以我对它和OO编程的方法仍然很陌生,所以我想在学习更多之前弄清楚一些事情,(我想从好的实践开始永远不会很快)。

我现在正在编写一个小的2D游戏,但我认为我的问题适用于任何重要的项目。为简单起见,我将提供我的游戏中的示例。

我有不同种类的僵尸,但它们都具有相同的属性(x,y,生命值,攻击等),所以我写了一个界面僵尸,我通过WalkIngZombie,RunningZombie TeleportingZombie等实现。这是最好的办法吗?我更喜欢抽象类吗?还是与超级类?(我不打算部分实现函数 - 因此我选择了接口而不是抽象类)

我有一个描述主角(幸存者)的类,由于它非常大,我想编写一个具有不同功能的界面,以便我可以轻松查看和共享其结构。这是好的做法吗?还是只是浪费空间和时间?

我希望这个问题不会被认为是主观的,因为我认为有经验的程序员不会不同意这种话题,因为接口/超类/抽象类的使用遵循逻辑规则,因此不仅仅是个人选择。


答案 1

您可以将接口视为“合约”。您正在定义一组方法,实现此接口的类必须实现这些方法。

另一方面,当您有一些代码可能是要实现的所有子类通用的代码时,将使用抽象类。因此,您可能有一个名为 Shape 的抽象类,该类具有一些通用代码,并且在派生类(圆形,正方形等)中,您可以拥有特定于这些形状的代码(将是一个示例)。但是,像颜色这样的东西可能对所有形状都是通用的,因此您可以在 Shape 抽象类中放置一个方法。getAreagetColor

你可以把这两个想法结合起来。您可以拥有实现接口的抽象类,这为您提供了两全其美的优势。

这些概念在OO中一遍又一遍地使用,因此理解它们很重要。你似乎正在:)的路上。

因此,如果你的僵尸类有一些适用于所有类型的僵尸的常见行为,那么它听起来像是一个抽象类的好候选者。如果你的游戏中有其他角色(也许是:),你也可以考虑创建一个界面(也许是一个界面)。然后,抽象类和抽象类将实现接口。GameCharacterUndeadMiceZombieUndeadMouseGameCharacter


答案 2

当有疑问时,我选择遵循GOF范式。

封装不同的内容: - 在其自己的类中定义唯一的行为。要参考上面的示例,请在其单独的类中实现行走、奔跑和传送的行为。这样,就实现了多态行为。

相反,**聚合常见内容** - 使用抽象类定义多态关联中的常见行为。我在设计对象之间的关系时使用这些原则。