(我是一个仍在学习最佳实践和Java的新手开发人员,感谢您的帮助/指导,谢谢!)

假设我有以下情况:


ClassA扩展了抽象ClassB,后者扩展了抽象ClassC
ClassD扩展抽象ClassE扩展抽象ClassF
扩展了抽象ClassC


[ClassC是父类]

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

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

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

最佳答案

首先,我要说的是,(由他们自己承认)新手开发人员关注此类问题非常好。这是一个很难解决的难题。

一种方法是使您的类实现接口,而不是扩展其他类。在Java中,一个类不能扩展多个类,但可以实现多个接口。不幸的是,这并不能节省您很多工作,因为当类实现接口时,您仍然必须编写所有实现代码。

另一种方法是避免继承,而是使用组合。这意味着您将拥有一个ClassAD类,其中包含ClassAClassD之间的通用功能,然后使ClassA包含ClassAD的实例,然后使ClassD也包含ClassAD的实例,然后在层次结构中的某个位置将具有ClassAD getAD()方法,以便ClassAClassD都具有它。

因此,如果ClassAD包含方法foo(),则将执行instanceOfA.getAD().foo()instanceOfD.getAD().foo()

09-25 22:21