何时实现接口以及何时扩展超类?

2024-04-09

我读了很多关于 Java 中的接口和类继承的文章,我知道如何做到这两点,并且我认为我对两者都有很好的感觉。但似乎没有人真正将两者并排比较,并解释何时以及为何要使用其中之一。我没有发现很多时候实现接口会比扩展超类更好。

那么什么时候实现接口以及什么时候扩展超类呢?


Use an 界面如果你想定义合同。 IE。 X 必须接受 Y 并返回 Z。它并不关心how代码正在这样做。一个类可以实现multiple接口。

Use an 抽象类如果你想定义默认行为在非抽象方法中,以便最终用户可以重用它,而无需一次又一次重写。一个类可以从only one其他类。一个抽象类only抽象方法可以像接口一样定义得很好。没有任何抽象方法的抽象类可被识别为模板法 http://en.wikipedia.org/wiki/Template_method_pattern模式(参见这个答案 https://stackoverflow.com/questions/1673841/design-patterns-in-java-api对于一些现实世界的例子)。

每当您想要为最终用户提供定义默认行为的自由时,抽象类又可以完美地实现接口。

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

何时实现接口以及何时扩展超类? 的相关文章

  • C# 带有泛型的异常继承语法

    我在 NHibernate 类定义中偶然发现了这一点 public class SQLiteConfiguration PersistenceConfiguration
  • 如何继承构造函数?

    Imagine具有许多构造函数和虚方法的基类 public class Foo public Foo public Foo int i public virtual void SomethingElse 现在我想创建一个重写虚拟方法的后代类
  • 初始化父类时如何返回子类的新实例?

    给定一个类层次结构如下 class A def initialize param if param 1 then initialize and return instance of B else initialize and return
  • 不在对象上下文中时使用 $this php

    我刚刚开始学习 php 中的 OOPS 我写了一个简单的程序来实现继承 当不在对象上下文中时 我收到 this 的致命错误 谁能解释一下这个错误 它是什么意思 这是我的代码
  • 在 C# 中将“set”添加到接口的属性中

    我希望通过为该接口中的属性提供设置访问器来 扩展 该接口 界面看起来像这样 interface IUser string UserName get 我想要这样的东西 interface IMutableUser IUser string U
  • 用于生成 C++ 代码轮廓/图的工具 - 有这样的东西吗? [复制]

    这个问题在这里已经有答案了 我需要深入研究用 C 编写的软件组件并对其进行一些修改 我幻想生成一些代码映射 它将显示类之间的关系并引导我完成方法的流程 调用图 有这个工具吗 几年前 我使用 Rational Rose 建模工具 该工具具有对
  • 界面与组合

    我想我理解接口和抽象之间的区别 抽象设置默认行为 在纯抽象的情况下 行为需要由派生类设置 接口是您所需要的 无需基类的开销 那么接口相对于组合的优势是什么 我能想到的唯一优点是在基类中使用受保护的字段 我缺少什么 你的标题没有意义 你的解释
  • 从继承的受保护 Java 字段创建公共访问器

    我怎样才能完成以下工作 class Foo extends javax swing undo UndoManager increase visibility works for method override def editToBeUnd
  • 如何在不实例化一个类的情况下检查它是否继承了另一个类? [复制]

    这个问题在这里已经有答案了 假设我有一个如下所示的类 class Derived some inheritance stuff here 我想在我的代码中检查类似的内容 Derived is SomeType 但看起来像is运算符需要 De
  • PHP 特性 - 定义通用常量

    定义可由命名空间内的多个类使用的常量的最佳方法是什么 我试图避免过多的继承 因此扩展基类不是理想的解决方案 并且我正在努力寻找使用特征的良好解决方案 这在 PHP 5 4 中是否可行 或者应该采取不同的方法 我有以下情况 trait Bas
  • 方法不必要地被调用?

    我有一个 BaseActivity 它可以通过其他所有活动进行扩展 问题是 每当用户离开 暂停 活动时 我都会将音乐静音 我也不再接听电话 问题是 onPause每当用户在活动之间切换时就会被调用 这意味着应用程序不必要地静音和停止tele
  • F# 对于 OO 或命令式来说缺少什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 Typescript 中从基类创建子类的新实例[重复]

    这个问题在这里已经有答案了 我想创建新实例Child班级来自Base类方法 这有点复杂 但我会尽力解释 这是一个例子 class Base constructor clone Here i want to create new instan
  • Python子类方法从超类方法继承装饰器

    我有一个具有retrieve 方法的超类 并且它的子类每个都实现自己的retrieve 方法 我希望每个retrieve 方法都被装饰为在收到相同参数时缓存返回值 而不必在每个子类中装饰该方法 装饰器似乎不能被继承 我可能可以调用超类的方法
  • 在打字稿中通过 this 从派生类型调用构造函数

    在我的打字稿中 我尝试通过基类中的方法创建 克隆子对象 这是我的 简化的 设置 abstract class BaseClass
  • 是否可以使用显式实现的接口属性对类进行 json 序列化?

    interface A string Name get set interface B string Name get set class C A B string A Name get set string B Name get set
  • 如何为带有继承的 C++ 类编写 C 包装器

    我只是想知道是否有一种方法可以为具有继承的 C 类创建 C 包装 API 考虑以下 class sampleClass1 public sampleClass public int get return this data 2 void s
  • 列出某个类的所有对象

    好的 我的问题如下 我有一个用这个构造函数描述宠物的类 public function construct name type age 所以我想做的是制作一些宠物对象 然后我想打印这个类的所有对象的所有属性 这样它看起来像this http
  • 两个对象相互依赖。那不好吗?

    当我为我的项目构建自己的系统时 我学到了很多关于设计模式的知识 我想问你一个我找不到答案的设计问题 目前我正在使用套接字构建一个带有多个客户端的小型聊天服务器 现在我有三门课 人级其中包含昵称 年龄和房间对象等信息 房间级它保存诸如房间名称
  • 覆盖Java中的属性[重复]

    这个问题在这里已经有答案了 在 Java 中 我最近有几个项目 我使用了这样的设计模式 public abstract class A public abstract int getProperty public class B exten

随机推荐

  • FITS文件的坐标转换问题

    我已经在 python 中加载并绘制了一个 FITS 文件 在上一篇文章的帮助下 我成功地将轴从像素转换为天体坐标 但我无法正确地以毫角秒 mas 为单位获取它们 代码如下 import numpy as np import matplot
  • os.walk 在第一次找到后停止查找子目录

    我需要获取目录中第一次出现的repository config 文件并停止在子目录中查找 这是我的目录树 WAS80 base disk1 ad repository config WAS80 base disk1 md repositor
  • 在脚本中调用matlab脚本

    我有两个 matlab 脚本文件 m 不是函数文件 如果我想在当前脚本中调用另一个脚本 我应该使用哪个命令 谢谢 我找到了答案 只需在另一个脚本中命名该脚本即可 myOtherScript 如果您愿意 可以使用 run myOtherScr
  • WCF 客户端传递用户名令牌,并将 MustUnderstand 设置为 true

    我的任务是创建一个将由外部客户端使用的 WCF 服务 客户端使用 WSSE 安全性 具体来说 他们通过 SOAP 标头传递用户名令牌 WCF 服务托管在启用了 SSL 的 IIS 服务器上 至此 我已经有了一个半工作原型 我现在处理的问题是
  • 检测画布内的鼠标单击位置

    我在尝试定义一个单击空白区域的函数时遇到了一个真正的问题 到目前为止 我已经成功地定义了单击一个对象的位置 其中有 10 个 但现在我需要一个单独的函数 以便在不单击任何对象时使用 总体思路可以在以下位置找到 http deciballs
  • IIS 无法将 Windows 凭据传递到 SQL Server for ASP.NET Core 应用程序

    我在一家大公司工作 每个人都有 Intranet 和 Windows AD 登录 我们有许多内部 SQL Server 数据库 允许我们使用 Windows 身份验证登录 我正在尝试通过 ASP NET Core 应用程序连接到其中一个数据
  • 工作表/范围选择(组合)不起作用

    我的 VBA 发生了一些变化 不允许我完成某些例程 我在下面列出了一个非常简单的例子 如果有人经历过此问题 我将非常感谢为解决此问题提供的任何支持 问题的简单示例 当我使用以下代码时 它工作正常 Sheets Sheet1 Select R
  • 使用 T-SQL 计算“nvarchar”字符串的 SHA1 哈希值

    我正在尝试计算SHA1使用 T SQL 计算 unicode 字符串的哈希值 下面的代码可以很好地工作ASCII字符串 declare input varchar 50 set input some text print SHA1 Hash
  • SQL LIKE 条件检查整数?

    我正在使用一组 SQL LIKE 条件来遍历字母表并列出以适当字母开头的所有项目 例如获取标题以字母 A 开头的所有书籍 SELECT FROM books WHERE title ILIKE A 这对于字母来说没问题 但是如何列出以任意数
  • 使用 xpath 和 nightwatch.js 单击动态文本

    我希望在我的应用程序中单击带有动态文本的元素 通常 要单击带有文本的元素 我会执行以下操作 useXpath click contains text some text 对于具有动态名称的测试 我尝试以下操作 useXpath click
  • window.opener 在 Firefox 中为空

    我有一个页面 打开弹出窗口为 openWindow top prcsTypeSelectionPopup event prcsTypeSelection lovWindow width 750 height 550 true dialog
  • 如何在R中保存包含很多点的pdf

    所以我必须保存一个包含很多点的pdf图 那不是问题 问题是当我打开它时 绘制所有这些点需要很长时间 我怎样才能以这样的方式保存这个pdf 当有人打开它时 它不必逐点绘制 如果图片质量下降一点我也没关系 这是一个示例 我认为这不会使您的计算机
  • 在 Android 中清除 AdMob 生成的缓存文件是一个好习惯吗?

    我已将 AdMob 集成到我的 Android 应用程序中 我注意到该应用程序在应用程序数据文件夹内 AdMob 生成的名为 app webview 的文件夹中占用了越来越多的存储空间 我应该在每次应用程序退出时清除此文件夹的内容吗 我应该
  • @Constraint 中清空 validatedBy

    我注意到所有内置约束都有一个空值validatedBy参数输入 Constraint i e Constraint validatedBy 首先 为什么允许它们具有空值validatedBy 我认为您可以仅将不需要额外验证的约束组合留空 另
  • Eclipse 抱怨 Web 应用程序属性

    我的 web xml 中的网络应用程序声明是
  • 如何强制MySQL将0作为有效的自增值

    长话短说 我有一个 SQL 文件 我想将其导入为skelstyle 文件 因此这将以编程方式重复完成 我可以根据需要编辑 SQL 文件 但我不想碰应用程序本身 该应用程序使用userid 0代表匿名用户 它在数据库中还有一个相关 空白 条目
  • 如何使用鼠标改变OpenGL相机

    我正在尝试在 OpenGL 中设置一个相机来查看 3 维中的一些点 为了实现这一点 我不想使用旧的 固定的功能样式 glMatrixMode glTranslate 等 而是自己设置模型视图投影矩阵并在我的顶点着色器中使用它 正交投影就足够
  • 无法从 Activity 调用 getSupportFragmentManager()

    我有一个有片段的活动 XML
  • woocommerce 下订单前检查邮政编码

    由于本地送货是唯一的选择 由于产品送货限制 我不希望客户进入结帐页面并必须填写他们的所有详细信息 然后才发现我们没有送货到他们的邮政编码 因此 我需要在结帐页面上进行与本地配送邮政编码检查相同的功能 但要在结帐过程的早期阶段添加 例如在购物
  • 何时实现接口以及何时扩展超类?

    我读了很多关于 Java 中的接口和类继承的文章 我知道如何做到这两点 并且我认为我对两者都有很好的感觉 但似乎没有人真正将两者并排比较 并解释何时以及为何要使用其中之一 我没有发现很多时候实现接口会比扩展超类更好 那么什么时候实现接口以及