接口与抽象和继承

2024-01-03

我已经了解了接口、抽象类和继承的用法。我看到每种都有其用途,但我仍然有点困惑。

我知道,一般一个类只能扩展另一个类,虽然有些类可能支持多重继承,但它可以实现多个接口(这可能是使用接口的主要原因)。但是,如果我是正确的,这个课程也可以由另一个课程扩展。我还发现抽象类可能比接口更快,并且可以具有非静态最终变量。

所以,我仍然不确定什么时候使用哪个更好。也许通过举一些例子可以更好地理解这一点。我并不反对使用任何东西,但我认为有些东西我没有看到。进一步的解释也可能有帮助。提前致谢。


如果您想要使用与基类相同的代码并使用额外的功能扩展它,那么从基类继承非常有用。

虚拟和抽象与此相关。您可以使用基本实现创建虚拟方法。后代类可以(可选)更改或添加到此实现。抽象类是本身不完整的基类。声明了一个抽象方法,但尚未实现。后代阶级must提供一个实现。如果基类实现了一个流,但该流的一部分需要由另一个类实现,那么这很有用。基类需要能够调用该部分,这就是声明抽象方法的地方。

接口则是另一回事。接口是关于类中存在哪些方法的契约,但它们可以由两个完全不相关的类来实现。这很方便,因为您可以为小块功能创建小接口。例如,可以保存的东西可以实现 ISavable,它只是强制“Save”方法的存在。两个完全不同的类可以实现这一点,例如允许“全部保存”功能仅保存可以保存的所有内容。

多重继承是一种特定的语言功能,在许多语言中都不可用,尽管在许多语言中您可以通过使用接口和delegate设计模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

接口与抽象和继承 的相关文章

  • Java - ZUI(可缩放用户界面)

    我目前正在做一个小型个人项目 需要显示极其大量的数据 我突然想到实现一种可缩放的用户界面 以允许用户在大量数据中导航 我知道现有的项目 例如ZVTM http zvtm sourceforge net and 短笛2d https code
  • 如何让Doxygen忽略继承关系?

    我试图让 Doxygen 在绘制协作图时忽略继承关系 假设我的类定义如下所示 class Derived public Base int x int y int z 现在 当我运行 Doxygen 时 我不想在生成的协作图中看到基类 乍一看
  • Java 通用问题

    下面的代码可以编译 但如果我取消注释行 它不会编译 我很困惑为什么 HashMap 确实扩展了 AbstractMap 并且声明映射的第一行可以正常编译 import java util AbstractMap import java ut
  • JRuby:带有 Ruby 块的 Java 命令模式:为什么它有效?

    我正在学习如何将 Java 库与 Ruby 代码集成 并提出以下问题 我有一个用Java实现的命令模式 如下所示 public interface Command public String execute String param pub
  • 继承类中的python __init__方法[重复]

    这个问题在这里已经有答案了 我想为子类提供一些额外的属性 而不必显式调用新方法 那么有没有办法给继承的类一个 init 不重写的类型方法 init 父类的方法 我编写下面的代码纯粹是为了说明我的问题 因此属性等的命名很糟糕 class in
  • 为什么 unique_ptr 隐式转换为 unique_ptr

    我编写了以下使用的代码unique ptr
  • Django 中使用外键的抽象基类继承

    我正在尝试在 Django 支持的网站上进行模型继承 以遵守 DRY 我的目标是使用一个名为 BasicCompany 的抽象基类来为三个子类提供通用信息 Butcher Baker CandlestickMaker 它们位于各自的应用程序
  • 强制派生类实现接口

    我今天在这里 就像昨天一样 遇到了另一个奇怪的界面问题 我有一堂课 public class InputDevice
  • VB.NET 与 C# 中的属性实现多级继承

    假设我有 2 个接口 如下定义 public interface ISkuItem public string SKU get set public interface ICartItem ISkuItem public int Quant
  • 行高继承

    我无法更改在正文中定义的跨度元素行高 我尝试使用 important 以及不同的行高表示法 包括字体 行高 这是代码 body font 16px 1 5 Arial Helvetica sans serif pageBody oferta
  • 仅扩展 Sass 的第一级

    我有几行 Sass content width 960px padding 15px 0 margin auto background inherit p text align justify padding 10px 在某些地方 我想用
  • 使用泛型类型实例化抽象类的对象

    我正在创建一个具有泛型类型的函数 并且该泛型类型是我需要实例化的抽象类型 这段代码会更清楚地解释它 public
  • 友谊和派生类

    假设我有以下类层次结构 class Base protected virtual void foo 0 friend class Other class Derived public Base protected void foo Some
  • 抽象父模型中的 models.E006 - Django 3.1

    我有一个抽象模型和一些从它继承的其他类 models py class Parameter models Model data integer models IntegerField blank True null True class M
  • super 在多重继承中无用? [复制]

    这个问题在这里已经有答案了 在多重继承中 super 如何工作 例如这里我有两个init我想通过 super 发送参数 class LivingThings object def init self age name self name n
  • 此 C++ 模板中的迭代器类型应该是什么?

    前一段时间在处理一些图形代码时 我使用整数作为底层坐标持有者编写了 Rect 和 Region 类 并且效果很好 Region 被实现为 STL 列表的简单类扩展 并且仅包含 矩形列表 现在我还需要使用双精度作为底层坐标持有者的相同类型的类
  • 如何只获取父类对象的属性

    我有两节课 class Parent object def init self id name self id id self name name self parent vars id name make a copy def print
  • 了解多重继承中的 vptr 吗?

    我试图理解 Effective C 一书中的陈述 下面是多重继承的继承图 现在书上说vptr需要每个类中单独的内存 它还做出以下声明 上图中的一个奇怪之处是 尽管涉及四个类 但只有三个 vptr 如果实现可以随意生成四个 vptr 但三个就
  • CSS 继承、别名和其他很酷的东西

    有一天 我随机浏览网页 发现了一些程序 可以让你编写 CSS 别名和其他很酷的东西 我现在不记得了 举个例子 我记得你可以这样做 myclass background color red greenfont 其中 greenfont 在其他
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节

随机推荐