当前位置: 首页 > 面试题库 >

为什么不重写而不使用抽象类?

东门晨
2023-03-14
问题内容

对于许多人来说,这可能是一个简单的问题,但令我感到困惑。我从Kathy
Sierra挑选了一个示例,该示例显示了抽象类的效用,但我无法理解抽象类的总体重要性。

示例 我们有一个Car带有抽象方法- power()&的抽象类topSpeed()。这些方法在 BMWVolkswagen
Audi的 子类中实现。

我的问题是-
为什么我们首先需要有抽象类Car来为每种汽车类型自定义方法?为什么在宝马的任何一种子类型中都没有这两种方法,然后说宝马,然后其他两种-大众和奥迪-
可以简单地覆盖这些方法?


问题答案:

通过将方法抽象化,这意味着人们必须实现它。您需要人们这样做,而人们也不可能忘记这样做,因为如果这样做,它们将无法编译。

@override注释存在一个非常类似的原因,通过标记的方法,@override你会得到一个错误,如果(例如)您键入的方法名错了,实际上没有覆盖的东西。

在许多方面,抽象类都位于接口和普通类之间的中间位置-它定义了使用接口时所需要执行的操作,并且还为您处理了一些实现。

类只能扩展另一个类。他们可以实现任何数量的接口。

例如,你可能会MotorVehicle被继承CarMotorbike并且Train-不过你可能有一个Steerable被实现的接口CarMotorbikePedalbike

要在评论中回答问题:

如果存在一个具有方法m()的接口“ I”,该方法由类“ A”实现,而另一个类“
B”要访问该方法m(),则这里需要接口。我们可以简单地不在类A中实现该方法吗?

您可以-
但另一方面,如果类B想同时访问m()A和类中的方法C(其中A和C彼此不继承或包含m()的公共类),那么执行此操作的方法是指定一个通用接口I,而类B使用接口类型I,而不使用类型A和C。

还请记住,可以在包和库之间使用接口。例如, 侦听器策略
模式大量使用了接口。Java开发人员编写JButton(例如)时,将ActionLstener其指定为接口,以为JButtons将来使用的人们提供最大的灵活性。



 类似资料:
  • 对许多人来说,这可能是一个简单的问题,但让我困惑。我从凯西·塞拉那里挑选了一个例子,展示了抽象类的实用性,但我无法理解抽象类的整体重要性。 例如,我们有一个带有抽象方法的抽象类, 我的问题是——为什么我们首先需要抽象类来为每种汽车类型定制方法?为什么不在这些汽车子类型中的任何一个中使用这两种方法,比如宝马和其他两个——大众和奥迪——可以简单地覆盖这些方法?

  • 问题内容: 为什么将类实现为常规类而不是将 抽象方法实现为 抽象 类。 会不会带来任何问题?或以这种方式有什么用吗? 而且,该方法应该是一种非常特定的方法, 其功能不能由任何其他类实现 (如果我没记错的话)。因此,我想该关键字比其他任何方法都更适合此操作。 但是我可以重写此方法并根据需要使用它, 它显然只印了, 有人告诉你我会产生一个新线程吗? 除了使工程师取代您感到困惑之外,还有什么其他用途?

  • 问题内容: 为什么Java类不能像抽象类那样具有抽象字段? 例如:我有两个扩展相同抽象基类的类。这两个类各自具有相同的方法,但其中包含String常数(恰好是错误消息)。如果字段可以是抽象的,那么我可以使这个常量抽象,并将该方法引入基类。相反,我必须创建一个抽象方法,在这种情况下称为该方法,该方法返回String,在两个派生类中重写此方法,然后可以拉出该方法(现在称为抽象方法)。 为什么我不能仅将

  • 为什么我从下面的代码中得到这个编译错误消息? (程序根据键盘上按下的箭头键,在4个方向上移动箭头:d) Direction.java:41:错误:DirectionBoard。DirectionListener不是抽象的,并且不会覆盖KeyListener中的抽象方法keyReleated(KeyEvent)

  • 大家好,我有这个主课堂 错误:(42,8)错误:Home不是抽象的,并且不会覆盖OnFragmentInteractionListener中的onFragmentInteract(String)抽象方法 我创建了一个导航抽屉,并希望有一个新的片段来显示另一个家庭活动的内容。 Android Studio告诉我做个家。类抽象或实现抽象方法。 里面: 我那样做了,但是什么也没有改变。我不能让home类

  • 问题内容: 为什么Object类是Java中em的基类,而不是抽象类? 我已经有很长时间了,这个问题纯粹是出于好奇,仅此而已。我的代码或任何人的代码都没有中断,因为它不是抽象的,但是我想知道为什么他们将其具体化了? 为什么有人要这个Object类的“实例”(而不是引用的存在)?一种情况是糟糕的同步代码,该代码使用对象的实例进行锁定(至少我曾经以这种方式使用过一次……我的错)。 对象类的“实例”是否