如何将相同的行为放在从类扩展的超类中?

时间:2017-02-13 07:46:05

标签: java inheritance design-patterns

我有以下三个类:

public class MyClassA extends FooA<Bar>
public class MyClassB extends FooB<Bar>
public class MyClassC extends FooC<Bar>

FooAFooBFooC都扩展Foobar<V>( - &gt; public class Foobar<V extends FooY> implements IFoobar<V>),但处于不同的继承级别。此外,值得一提的是,FooAFooBFooC是API的一部分,我无法修改。在我的课程MyClassAMyClassBMyClassC中,我以完全相同的方式使用一些属性和方法,因此我想创建一个实现相同行为的父类。但是,我不确定如何通过泛型实现此继承方案。

我想到了类似的东西:

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>>

我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

每当你遇到“太多继承”时,正确的答案可能是旧的口头禅:更喜欢构成而不是继承

换句话说:请记住继承不仅仅是将“A extends B”放到某个类声明上;并且还要记住,继承的主要意图是表达“是一种”关系; 意味着避免代码重复的简单方法。 (是的,代码重复非常重要,但使用继承来实现它通常是一个坏主意!)

从这个意义上说:而不是进一步增加这个“继承丛林”;我宁愿退后一步,看看是否有必要定义一些 new 接口,以便更好地捕获您需要的功能集;并创建实现这些接口的类;不是基于继承其他类,而是通过实例化这些类的对象;并绕过一些包装。