我有一個(gè)抽象類Parent與抽象方法foo(),并bar()和其他非抽象方法和字段。我需要?jiǎng)?chuàng)建 4 個(gè)子類(以及以后更多)來(lái)涵蓋foo()和的不同變體的每種組合bar():fooA(), fooB(), barA(), barB()。這些變體需要訪問(wèn)Parent. 換句話說(shuō),如果 Java 支持多重繼承,那么我會(huì)有類似的東西: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{}我找到了兩種解決方案,每一種都有效,但差不多。有沒(méi)有更好的方法來(lái)實(shí)現(xiàn)這種行為?我的解決方案如下:1)第一個(gè)解決方案: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 */ }}這樣做的問(wèn)題是它重復(fù)了fooB()所有只fooB()需要的附加方法的代碼。當(dāng)需要更多變化時(shí),問(wèn)題會(huì)呈指數(shù)級(jí)惡化。
添加回答
舉報(bào)
0/150
提交
取消