当前位置: 首页 > 知识库问答 >
问题:

如何在没有多重继承的情况下避免代码重复(例如在java中)?

寿嘉悦
2023-03-14

(我是一个开发新手,还在学习最佳实践和java--任何帮助/指导都将不胜感激,谢谢!)

假设我有以下情况:

  • classa扩展抽象classb扩展抽象classc.
  • classD扩展抽象classe扩展抽象classF扩展抽象classC.

共有1个答案

习旻
2023-03-14

首先,让我说,当一个新手开发人员(他们自己承认)关心这类问题时,这是非常好的。大多数开发人员不去思考,只是写了很多很多没有头脑的代码,因为他们知道这是一条可行的道路,不需要思考。(维护所有这些代码似乎从来都不是什么问题,因为...它存在于遥远的未来!)

大多数Java商店遵循的方法是避免继承,因为继承太复杂,而是使用组合,这也导致必须编写大量无意识的代码。更多的时候,这是由于误解了“喜欢组合而不是继承”的建议,好像它说“只使用组合,永远不要使用继承”。

我不知道你到底在做什么,所以我不能建议你放弃你正在做的事情,用合成来代替。我只是假设你有使用继承的理由,所以,我不会在这里写更多关于合成的东西;如果您有兴趣了解更多关于合成的知识,可以很容易地搜索到术语“合成与继承”。

 类似资料:
  • 问题内容: 这主要是关于Java继承的问题。我正在开发一个有2个窗口的程序,这两个窗口将在单独的类中开发,这将扩展JPanel。第一类是“ FileSub1”,第二类是“ FileSub2”。 这两个类共有许多方法,因此我想创建一个名为“ Files”的类,并将“ FileSub1”和“ FileSub2”作为其子类。但是Java不支持多重继承!我在这里可以做什么? 问题答案: 我不明白为什么您需

  • 在上述情况下,如果用户为空,则给出NPE。如何避免NPE?

  • 我在一个有这些类的项目中工作: 这些coures类具有其他方法和属性。 如果可以的话,它应该能够使用来自Square和RedRectangle的方法,否则它应该使用来自Rectangle的方法,并且它应该迫使开发人员从他自己的代码中为所有在Square和RedRectangle中被重写的方法编写代码。 我实际上知道这是多重继承,Java不支持它,但我需要实现这种行为。 我试图使用Square和Re

  • 问题内容: 我在JUnit中有许多测试用例。它们都需要相同的代码才能在其静态方法中执行。这是代码重复,我正在努力摆脱它。这样做是一种肮脏的方式。JUnit中是否还有其他机制可能会有所帮助? PS。我写了关于这个主题的博客文章:http : //www.yegor256.com/2015/05/25/unit-test- scaffolding.html 问题答案: 规则是构成可重用代码(而不是从其

  • 问题内容: 我想在Python中实现自定义列表类作为的子类。为了获得所有列表操作的完全类型兼容性,我需要从基类中重写的最少方法集是什么? 这个问题表明至少需要重写。从进一步的研究,也和是必需的。所以我有这段代码: 下列语句即使没有覆盖方法也可以按需工作: 这些语句仅与上述类定义中的覆盖方法一起使用: 我唯一不知道如何实现的是使扩展切片返回正确的类型: 我需要在类定义中添加些什么才能获得类型? 另外

  • 我一直在做一个倒计时程序,我想到了这个。 在最后的while循环中,如果里面没有print/println语句,倒计时代码就不会执行。为什么?不过,该程序与print语句配合得非常好。

  • 我们有一个应用程序,将部署在具有不同IP的服务器上。JNLP是在构建时生成的。因此,我们定义了没有代码库的JNLP: 然而,当第二次启动这个应用程序时(从第一次启动时创建的桌面图标),代码库被设置为本地文件系统,这是绝对无用的。我希望Java Webstart在第一次启动应用程序时使用实际的源地址设置代码库。这似乎不是真的。 我如何准备一个通用的JNLP,它可以在不同的服务器上使用而无需修改?

  • 问题内容: 假定派生自以下类的类: 如果我想在两个初始化器中都使用相同的代码,例如 并且 不要 在类实现中 重复 两次 该代码 ,我将如何构造方法? 尝试的方法: 创建一个在-> Swift编译器在调用之前给出有关未初始化变量的错误之后调用的方法 之前的调用显然失败,并出现编译器错误 “ super.init调用之前使用了’self’ 问题答案: 正如GoZoner所说,将变量标记为可选将起作用。