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

标签 java abstract-class multiple-inheritance extends

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

假设我有以下情况:

  • ClassA 扩展了抽象 ClassB,而 ClassB 又扩展了抽象 ClassC
  • ClassD 扩展了抽象 ClassE,而 ClassE 又扩展了抽象 ClassF 它扩展了抽象ClassC

[ClassC是父类]

其中 ClassAClassD 具有一组相同的属性、getter 和 setter。

我想避免代码重复(属性、getter、setter)。我还想避免编写不同的方法 doSomething(ClassA class, ...)doSomething(ClassD class, ...) 除了参数类型之外,它们在所有方面都是相同的.

如果这两个类直接从 ClassC 继承,我会让它们扩展一个具有所有 getter、setter 和属性的类,并将该类型传递到方法 doSomething(. .)。由于 ClassAClassD 无法扩展多个类,那么处理这种情况的最佳方法是什么?

最佳答案

首先,让我说,(据他们自己承认)新手开发人员关心此类问题是非常好的。大多数开发人员会避免思考,只是编写大量无意识的代码,因为他们知道这是可行的路径,无需思考。 (并且必须维护所有这些代码似乎从来都不是一个大问题,因为......它距离 future 还很遥远!)

组成

大多数 Java 商店遵循的方法是避免继承,因为它太复杂,而是使用组合,这也导致必须编写大量无意识的代码。通常,这是由于对“优先使用组合而不是继承”的建议的误解,就好像它说“仅使用组合,从不使用继承”。

我不知道你正在做什么,所以我不能建议你放弃你正在做的事情并使用组合。我只是假设你有使用继承的理由,所以,我不会在这里写更多关于组合的内容;如果您有兴趣了解有关组合的更多信息,可以轻松地在 google 上搜索术语“组合与继承”。

接口(interface)继承

从您描述的类结构来看,您似乎处于一种典型的情况,可以从使用接口(interface)中受益匪浅:在Java中,一个类不能扩展多个类,但它可以实现多个接口(interface)。

如果两个接口(interface)都定义了像 reticulate( Spline s ) 这样的方法,并且一个类实现了这两个接口(interface),那么它可以提供 reticulate() 的单个实现>,它将满足两个接口(interface)。 (这样做的缺点是,如果您希望您的类为每个接口(interface)提供不同的 reticulate() 实现,您就会陷入困境;这是无法完成的。)

此外,Java支持接口(interface)中的default方法,这意味着您需要提供的某些功能可以直接编码到接口(interface)中,以便实现类从接口(interface)继承此功能因此不必重新实现它。

关于java - 如何在没有多重继承的情况下避免代码重复(即在 java 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39540468/

相关文章:

java - 请求被拒绝,因为没有找到多部分边界

java - 在 (debian 9) python :3 docker image using terminal commands 上安装 java 8

java - SavingsAccount 构造函数

java - 抽象类中的非抽象空方法是什么意思

java - 如何解决 Java 中缺少抽象字段的问题?

c++ - C++中的多重继承

c++ - 模板和接口(interface)的多重继承问题

java - 如何获取类的实例?

c# - 如何在实际类中引用枚举而不是 C# 中的基类

python - 为什么这是一个模棱两可的 MRO?