我有以下三个类:
public class MyClassA extends FooA<Bar>
public class MyClassB extends FooB<Bar>
public class MyClassC extends FooC<Bar>
类FooA
,FooB
和FooC
都扩展Foobar<V>
( - &gt; public class Foobar<V extends FooY> implements IFoobar<V>
),但处于不同的继承级别。此外,值得一提的是,FooA
,FooB
和FooC
是API的一部分,我无法修改。在我的课程MyClassA
,MyClassB
和MyClassC
中,我以完全相同的方式使用一些属性和方法,因此我想创建一个实现相同行为的父类。但是,我不确定如何通过泛型实现此继承方案。
我想到了类似的东西:
public class MyParentClass<V extends Foobar> extends V
然后我会简单地执行以下操作:
public class MyClassA extends MyParentClass<FooA<Bar>>
public class MyClassB extends MyParentClass<FooB<Bar>>
public class MyClassC extends MyParentClass<FooC<Bar>>
我该如何做到这一点?
答案 0 :(得分:0)
每当你遇到“太多继承”时,正确的答案可能是旧的口头禅:更喜欢构成而不是继承。
换句话说:请记住继承不仅仅是将“A extends B”放到某个类声明上;并且还要记住,继承的主要意图是表达“是一种”关系; 不意味着避免代码重复的简单方法。 (是的,代码重复非常重要,但使用继承来实现它通常是一个坏主意!)
从这个意义上说:而不是进一步增加这个“继承丛林”;我宁愿退后一步,看看是否有必要定义一些 new 接口,以便更好地捕获您需要的功能集;并创建实现这些接口的类;不是基于继承其他类,而是通过实例化这些类的对象;并绕过一些包装。