我有一个抽象类Parent与抽象方法foo(),并bar()和其他非抽象方法和字段。我需要创建 4 个子类(以及以后更多)来涵盖foo()和的不同变体的每种组合bar():fooA(), fooB(), barA(), barB()。这些变体需要访问Parent. 换句话说,如果 Java 支持多重继承,那么我会有类似的东西:abstract class Parent{ abstract foo(){} abstract bar(){} //other fields and methods that will be accessed foo and bar are PROTECTED}abstract class FooA extends Parent{ @Override foo(){ ... }}abstract class FooB extends Parent{ @Override foo(){ ... }}abstract class BarA extends Parent{ @Override bar(){ ... }}abstract class BarB extends Parent{ @Override bar(){ ... }}class ChildAA extends FooA, BarA{ }class ChildAB extends FooA, BarB{}class ChildBA extends FooB, BarA{}class ChildBB extends FooB, BarB{}我找到了两种解决方案,每一种都有效,但差不多。有没有更好的方法来实现这种行为?我的解决方案如下:1)第一个解决方案:abstract class Parent { foo(){ /* behaves like fooA */ } //other fields and methods that will be accessed foo and bar are PROTECTED}class ChildAA extends Parent{ barA(){ ... }}class ChildAB extends Parent{ barB(){ ... }}class ChildBA extends ChildAA{ @Override foo(){ /* behaves like fooB */ }|class ChildBB extends ChildAB{ @Override foo(){ /* behaves like fooB */ }}这样做的问题是它重复了fooB()所有只fooB()需要的附加方法的代码。当需要更多变化时,问题会呈指数级恶化。
添加回答
举报
0/150
提交
取消