gpt4 book ai didi

java - 为什么不覆盖而不是使用抽象类?

转载 作者:搜寻专家 更新时间:2023-11-01 02:09:35 25 4
gpt4 key购买 nike

这对很多人来说可能是一个简单的问题,但让我感到困惑。我从 Kathy Sierra 那里挑选了一个示例来展示抽象类的实用性,但我无法理解抽象类的整体重要性。

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

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

最佳答案

将方法抽象化,意味着人们必须去实现它。你要求人们这样做,人们不可能忘记这样做,因为如果他们忘记了,它将无法编译。

@override 注释存在的原因非常相似,通过将方法标记为 @override 如果(例如)您输入了错误的方法名称,则会出现错误并且实际上并没有覆盖某些东西。

在许多方面,抽象类介于接口(interface)和普通类之间 - 它定义了您需要做什么才能像接口(interface)一样使用它,但它也为您处理一些实现。

类只能扩展一个其他类。它们可以实现任意数量的接口(interface)。

例如,您可能有 MotorVehicleCarMotorbikeTrain 继承 - 但是您可能有由 CarMotorbikePedalbike 实现的 Steerable 接口(interface)。

回答评论中的问题:

If there is an Interface "I" having method m() which is implemented by class "A" and another class "B" wants to access the method m(), what is the need of interface here. Can we simply not implement that method in class A?

你可以 - 但另一方面,如果类 B 想要在类 A 和类中访问方法 m() C(其中 A 和 C 不继承彼此或包含 m() 的公共(public)类)那么这样做的方法是指定一个公共(public)接口(interface) I,类 B 使用该接口(interface)类型,我,根本不是 A 型和 C 型。

还要记住,包和库之间可以使用接口(interface)。例如,ListenerStrategy 模式大量使用接口(interface)。当 Java 开发人员编写 JButton(例如)时,ActionLstener 被指定为一个接口(interface),以便为将来使用 JButtons 的人们提供最大的灵 active 。

关于java - 为什么不覆盖而不是使用抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20790360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com