gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:33:19 25 4
gpt4 key购买 nike

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

假设我有以下情况:

  • ClassA extends abstract ClassB extends abstract ClassC.
  • ClassD extends abstract ClassE extends abstract ClassF它扩展了抽象 ClassC

[ClassC是父类]

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

我想避免代码重复(属性、getter、setter)。我还想避免编写不同的方法 doSomething(ClassA class, ...)doSomething(ClassD class, ...) 除了参数类型外其他方法都相同.

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

最佳答案

首先,让我说,当(他们自己承认)新手开发人员关心此类问题时,这是非常好的。大多数开发人员都没有思考,而是编写了大量无意识的代码,因为这是他们知道行得通的路径,无需思考。 (并且必须维护所有这些代码似乎从来都不是什么大问题,因为......它在未来太远了!)

组成

大多数 Java 商店遵循的方法是避免继承,因为它太复杂了,而是使用组合来代替,这也导致不得不编写很多很多无意识的代码。通常情况下,这是由于对“倾向于组合而不是继承”的建议的误解,就好像它说的是“只使用组合,永远不要使用继承”。

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

接口(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com