代码之家  ›  专栏  ›  技术社区  ›  Samuel

使用Java[接口/抽象类][重复]

  •  25
  • Samuel  · 技术社区  · 14 年前

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

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

    接口 抽象类? 或者用一个 超一流 接口 抽象类 )

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

    9 回复  |  直到 11 年前
        1
  •  17
  •   dcp    14 年前

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

    另一方面,当您有一些代码可能是要实现的所有子类的公共代码时,则使用抽象类。因此,您可能有一个名为Shape的抽象类,它有一些公共代码,在派生类(圆、正方形等)中,您可以有特定于这些形状的代码( getArea getColor

    你可以把这两个想法结合起来。您可以拥有实现接口的抽象类,这将使您两全其美。

    这些概念在OO中被反复使用,因此理解它们很重要。你似乎正在路上:)。

    因此,如果你的僵尸类有一些常见的行为,适用于所有类型的僵尸,它听起来像是一个很好的候选人是一个抽象类。您还可以考虑创建一个接口(可能是 GameCharacter UndeadMice Zombie UndeadMouse 抽象类将实现 游戏角色 接口。

        2
  •  4
  •   Kartik    14 年前

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

    封装变化

    相反,**聚合什么是公共的**-使用抽象类来定义多态关联中的公共行为。我在设计对象之间的关系时使用这些原则。

        3
  •  3
  •   Jim Ferrans    14 年前

    任何具体的僵尸你可能想使拥有任何组合的步行,跑步或传送功能,你想实现。

    我认为乔什·布洛赫的《有效的Java》(第二版)可以被看作是“当前的思维”。。。

    http://books.google.com/books?id=ZZOiqZQIbRMC&pg=RA1-PA71&lpg=RA1-PA71&dq=%22Bloch%22+%22Effective+java:+programming+language+guide%22+&hl=de&sig=RxlDlRBWUvNAzsAFzqOcftrYI5E#v=onepage&q&f=false

    因此,您可以将所有行为实现为独立的类,然后通过实现&组成。。

        4
  •  1
  •   Maurice Perry    14 年前

    我会将Zombie作为一个抽象类来编写,以避免重新定义x、y、health等字段。。。

    对于Survivor类,我只需将要在外部使用的函数声明为public。我在全班最前面声明了公共函数。当只有一个类实现一个接口时,声明该接口将添加一个要维护的文件。避开它。

        5
  •  1
  •   JHollanti    14 年前

    没有人同意在超级/抽象类上使用接口;)

    如果你真的很喜欢这种东西,你可能也想看看混血儿。它不是Java直接支持的东西,但是有为它构建的库。

        6
  •  1
  •   Community Egal    7 年前

    我有不同种类的僵尸,但它们都有相同的属性(x,y,健康, 抽象类?还是和一个超级班?

    抽象类将是僵尸的超级类。接口在某种意义上也可以是僵尸的超级类(超级接口?)。

    而不是抽象类)

    不知道你这是什么意思。

    如果你有不同种类的怪物(地精、兽人等),你可能会发现这些怪物的共同行为会属于不同的基类。这将建议一个接口。

    我有一个类描述的主要人物(幸存者),因为它是相当大的我 想写一个具有不同功能的接口,让我可以很容易的看到和理解 分享它的结构。这是个好习惯吗?还是仅仅是浪费空间和时间 时间?

    大多数游戏将所有这些角色类型视为某种怪物,因为它们都有许多共同的属性(健康)。魔法、宝藏、武器等)

    所以也许这更像是一个接口的论据。

    请参见:

    Using inheritance and polymorphism to solve a common game problem Class diagram examples for RPG (Role Playing Game) designing class hierarchy for typical characters in role playing game

        7
  •  0
  •   Lucero    14 年前

    我不认为在您的例子中,您的接口和类结构与实际情况吻合得很好。事实上,我相信(如果我错了请纠正我)每一个僵尸都可以行走、奔跑、传送等,这取决于它在哪里。

    因此,您应该有一个zombie类或接口,并具有修改zombie状态的操作。这个动作可能是一个接口或抽象类,这样你就可以将任何动作应用到僵尸身上,而不必知道具体的动作是什么(例如。 action.perform(zobie)

        8
  •  0
  •   Greg Olmstead    14 年前

    就你的僵尸例子来说,这个接口会做得很好,除非你有你想要所有僵尸都做的通用代码。

    假设你有一个 Move

        9
  •  0
  •   p01ntbl4nk    14 年前

    我的意见是你最好用抽象类叫做 生物 僵尸 所有类型的僵尸。
    你还需要一个接口。。来定义一个生物能做什么。。
    比如,走路,抓,尖叫。。。
    需要抽象类的原因是禁用 生物 ,你不会想要一个不知道是什么生物的生物吧?