使用Java [接口/抽象类]

Sam*_*uel 25 java abstract-class interface superclass

最近我决定看看Java,所以我还是很新的,也是OO编程的方法,所以我想在学习更多东西之前先做一些事情,(我想它永远不会很快从良好实践开始) ).

我现在正在编写一个2D游戏,但我认为我的问题适用于任何非平凡的项目.为了简单起见,我将从我的游戏中提供示例.

我有不同种类的僵尸,但它们都有相同的属性(x,y,健康,攻击等)所以我写了一个界面 Zombie,我实现了WalkingZombie,RunningZombie TeleportingZombie等.这是最好的事情吗?我最好用抽象课吗?还是超级?(我不打算部分实现函数 - 因此我选择了一个接口而不是一个抽象类)

我有一个类描述主角(Survivor),因为它非常大,我想用不同的函数编写一个接口,这样我就可以轻松地看到并分享它的结构.这是好习惯吗?还是只是浪费空间和时间?

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

dcp*_*dcp 16

您可以将界面视为"合同".您正在定义一组实现此接口的类必须实现的方法.

另一方面,当您拥有一些可能对您要实现的所有子类都通用的代码时,将使用抽象类.因此,您可能有一个名为Shape的抽象类,它有一些公共代码,在派生类(Circle,Square等)中,您可以拥有特定于这些形状的代码(getArea将是一个示例).但是像颜色这样的东西可能对所有形状都很常见,所以你可以getColor在Shape抽象类中放置一个方法.

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

这些概念在OO中反复使用,因此理解它们非常重要.你好像在路上:).

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