一尘不染

是否有任何理由要在定义的类的每个方法中都有一个抽象类?

java

似乎抽象类意味着该类的定义不完整,因此无法实例化。

我看到了一些简单的Java代码,其中包含一个抽象类,其中定义了所有方法。然后我想知道,为什么他们将其作为抽象类而不是真实类?他们是在这样做,所以我们不能从这个抽象类实例化吗?还是从定义了所有内容的抽象类中获得其他好处?


阅读 247

收藏
2020-12-03

共1个答案

一尘不染

即使所有方法都具有默认实现,也有可能这些实现在应用程序上下文中实际上没有 意义
。这些方法可能仅进行内部记账,而实际有用的实现必须由派生类提供,该派生类将执行其需要执行的操作,然后调用超类方法。

但是,这仅仅是猜测。您将必须显示一个实际示例来说明这种设计的原因。

例如,让我们以一个简单的游戏引擎为例。我的GameObject游戏中有很多不同的地方。

  • 有些是可见的,所以我的基本类有一个draw()方法。但是可能有一些看不见的对象(如触发器区域)根本不显示,因此我在基类中将其实现为无操作。

  • 有些人与某物碰撞时会做某事,因此每个人都有一个collide(other)方法。但是有些碰撞时就像纯粹的视觉粒子效果一样,什么也不做,因此我在基类中也提供了禁止操作的功能。

  • 有些人在每次游戏打勾时都会做一些事情,所以他们有update()办法。但是某些对象(例如墙)可能根本无法独自执行任何操作。因此,我也对此不提供任何操作。

那么,当我有一个不可见的对象,自己不做任何事情并且不与任何东西交互时,该怎么办?在游戏中没有理由。所以我做了基础课abstract从理论上讲,
您可以实例化它,因为所有方法都有实现,但是 实际上 您没有理由这样做,并且当您尝试时,您会误解了我的游戏引擎的工作方式。

2020-12-03