(我是一个仍在学习最佳实践和Java的新手开发人员,感谢您的帮助/指导,谢谢!)
假设我有以下情况:ClassA
扩展了抽象ClassB
,后者扩展了抽象ClassC
。ClassD
扩展抽象ClassE
扩展抽象ClassF
扩展了抽象ClassC
。
[ClassC
是父类]
其中ClassA
和ClassD
具有一组相同的属性,getter和setter。
我想避免该代码重复(属性,getter,setter)。我还想避免编写除参数类型之外所有方法都相同的不同方法doSomething(ClassA class, ...)
和doSomething(ClassD class, ...)
。
如果这两个类直接从ClassC
继承,我希望它们扩展一个具有所有getter,setter和属性的类,并将该类型传递给方法doSomething(..)
。由于ClassA
和ClassD
不能扩展多个类,因此应对这种情况的最佳方法是什么?
最佳答案
首先,我要说的是,(由他们自己承认)新手开发人员关注此类问题非常好。这是一个很难解决的难题。
一种方法是使您的类实现接口,而不是扩展其他类。在Java中,一个类不能扩展多个类,但可以实现多个接口。不幸的是,这并不能节省您很多工作,因为当类实现接口时,您仍然必须编写所有实现代码。
另一种方法是避免继承,而是使用组合。这意味着您将拥有一个ClassAD
类,其中包含ClassA
和ClassD
之间的通用功能,然后使ClassA
包含ClassAD
的实例,然后使ClassD
也包含ClassAD
的实例,然后在层次结构中的某个位置将具有ClassAD getAD()
方法,以便ClassA
和ClassD
都具有它。
因此,如果ClassAD
包含方法foo()
,则将执行instanceOfA.getAD().foo()
或instanceOfD.getAD().foo()
。