java中抽象类和接口的最佳实践

2024-01-23

因此,您已经有了一个接口和一个实现接口中方法的子集的抽象类。您还拥有一些继承抽象类并提供抽象类未提供的方法的实现的类。

那么这里的最佳实践是什么?我正在谈论这样的问题:

1)抽象类应该实现接口还是它的子类?每节课都应该吗?在我看来,抽象类就应该如此。当然,所有的类都可以实现该接口,但这似乎是多余的,因为抽象的子类将“继承”该接口,因为它们扩展了抽象类。

2)考虑到抽象类实现了接口的部分内容,它是否也应该为它没有实现的方法声明抽象方法?在我看来,这是正确的,但在某种程度上,这似乎是多余的,因为抽象的子级将需要实现这些方法才能进行编译。

那么您对最佳实践的看法是什么?问题归结为:我们有一个接口,它定义了我们希望某些类执行的操作,我们有接口中定义常见行为的方法的子集,并且我们有几种不同的方法来定义不常见的行为。布置这个问题的最佳方式是什么?


这里应该对您有所帮助的原则是 DRY:不要重复自己(http://en.wikipedia.org/wiki/Don%27t_repeat_yourself http://en.wikipedia.org/wiki/Don%27t_repeat_yourself).

在这种情况下,DRY 意味着您不应该做不必要的工作。

因此,对于您的第一个问题,抽象类应该实现接口,因为它可以使您免于在每个具体类中重复“implements X”子句。

至于第二个问题,在实现它的抽象类中重复接口方法是没有意义的。这是多余的工作。此外,当接口演变/更改时,您将需要更改抽象类中的对应(抽象)方法,这是一个令人头痛的问题。在某些时候,您会错过更新某些方法,而具体类将需要徒劳地实现这些方法。

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

java中抽象类和接口的最佳实践 的相关文章

  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 如何让两个SQL查询真正异步

    我的问题是基于一个真实的项目问题 但我从未使用过System Threading Tasks库或执行任何涉及线程的严肃编程 因此我的问题可能是缺乏有关特定库的知识以及对异步在编程方面的真正含义的更普遍的误解 所以我的真实案例是这样的 我需要
  • 从 AppDelegate 调用委托函数不起作用

    我试图在 AppDelegate 中调用委托函数 但似乎它永远不会被调用 import UIKit UIApplicationMain class AppDelegate UIResponder UIApplicationDelegate
  • 弹性搜索索引和关系数据库中的索引有什么区别?

    似乎在弹性搜索中 您将在集合上定义索引 而在关系数据库中 您将在列上定义索引 如果整个集合都建立了索引 为什么还需要定义它 不幸的是 索引 一词在 ES 和关系数据库中的含义略有不同 编辑 非常 因为它们针对不同的用例进行了优化 数据库中的
  • Python UnicodeDecodeError:“utf8”编解码器无法解码字节...意外的代码字节

    Python 新手构建他的第一个 Web 应用程序的旅程 应用程序链接 http contractpy appspot com http contractpy appspot com 这只是一个实验性应用程序 遵循a的建议堆栈溢出用户 ht
  • 为什么从 ControllerBase 与 Controller for ASP.NET Core Web API 派生?

    我正在按照本教程创建 ASP NET Core Web API 并且在添加控制器的部分中 本教程提供了用于替换控制器模板代码的代码 真正引起我注意的事情之一是在模板代码中 我得到 TodoController Controller 然后在我
  • 使用按钮打开另一个模块表单视图

    我正在尝试打开另一个模型表单视图 但收到错误外部 ID 未找到 在 py文件中 class ru assignments models Model name ru assignments class ru assignments sub m
  • 0022 和 022 之间的 umask 区别 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 umask 和 umask 有什么区别吗0022 and 022 我想将我的 umask 更改为022 我该怎么做 umask 没有区别0022和 u
  • 如何在 Azure 移动服务部署上使用最新的 npm

    我当前使用的 Azure 移动服务映像已锁定到 npm 版本 1 2 30 映像上安装了最新的 npm 版本 位于 Program Files x86 npm 下 但是 npm 被锁定到版本 1 2 30 因为它是与 node js 一起安
  • 当我想要存储从下拉列表中选择或用户输入的值时,数据库设计的最佳实践是什么?

    我正在尝试找到设计数据库的最佳方法 以便允许出现以下情况 向用户呈现大学的下拉列表 例如 用户从列表中选择他 她的大学 如果存在 如果该大学不存在 他应该在文本框中输入自己的大学 有点像其他 例如 考虑到我可能想使用大学 ID 进行排序 可
  • Tensorflowdynamic_rnn参数含义

    我正在努力理解神秘的 RNN 文档 任何有关以下内容的帮助将不胜感激 tf nn dynamic rnn cell inputs sequence length None initial state None dtype None para
  • 有构建 Xcode 4 插件的文档吗?

    最近我注意到几个项目github http github com通过插件扩展 Xcode 4 的功能 两个项目为例 olemoritz http twitter com olemoritz 迷你Xcode https github com
  • 当时间更改或结束时,Firefox 会在视频上触发“暂停”事件

    我在网站上嵌入了一个视频 但我在 Firefox 中遇到了一些奇怪的行为 每次我通过单击时间滑块更改播放位置时 pause事件被触发 同样 每次视频结束时pause事件被触发 甚至在ended event 我首先想知道我编写的一些JS是否有
  • 是否可以使用标准 android api 在屏幕上移动组件?

    我想制作一个android用户界面 允许用户移动添加components widgets通过选择它们然后拖动它们来在屏幕上移动 使用标准的 android api 可以吗 是的 这取决于您想要实现的目标 可以办到using标准 API 但此
  • 我需要打开哪些防火墙端口才能允许 Sinch 和 WebRTC 工作?

    Sinch 在互联网和各种 NAT 网络上运行得非常好 但我刚刚尝试了企业防火墙后面的设备 突然我们无法拨打电话 更具体地说 设备可以互相呼叫 但是当调用 onCallEstablished 时 音频流已连接 呼叫就会中断 听不到来自远端的
  • 防止渲染阻塞 CSS

    我有一个从 CDN 引用 Bootstrap 4 的网页 在里面head在我的 HTML 页面中 我有以下内容 这是我引用的唯一 CSS 然而 当我运行 Google 的 PageSpeed 工具时 出现以下错误 消除首屏内容中阻碍渲染的
  • 如何使用 JavaScript 按钮删除 gridview 上的一行并保留在同一页面上

    我正在通过 gridview 显示一组记录 并且edit and delete旁边的按钮 我在记录删除部分遇到问题 我想要的行为如下 用户单击按钮 调用 JavaScript 验证函数 单击按钮后记录将被删除 但用户与其余记录仍保留在同一页
  • 如何以编程方式操作 Windows 桌面图标位置?

    几年前 我天真地尝试编写一个小应用程序来保存我战术性放置的桌面图标 因为当某些事件重置它们时 我厌倦了将它们拖回原来的位置 在花费了太多时间未能找到一种方法来查询 更不用说保存和重置 我的图标的桌面位置后 我放弃了 有人知道 Windows
  • 如何使用 Rust 从 stdin 创建高效的字符迭代器?

    现在既然Read chars https doc rust lang org nightly std io trait Read html method chars迭代器已被正式弃用 https github com rust lang r
  • 如何从字符串中删除所有子字符串

    如何从字符串中删除该模式的所有实例 string str red tuna blue tuna black tuna one tuna string pattern tuna 从字符串中删除该模式的所有实例 include
  • java中抽象类和接口的最佳实践

    因此 您已经有了一个接口和一个实现接口中方法的子集的抽象类 您还拥有一些继承抽象类并提供抽象类未提供的方法的实现的类 那么这里的最佳实践是什么 我正在谈论这样的问题 1 抽象类应该实现接口还是它的子类 每节课都应该吗 在我看来 抽象类就应该