Java:可以访问超类的字段和方法的策略模式?

我有一个抽象类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()需要的附加方法的代码。当需要更多变化时,问题会呈指数级恶化。


慕慕森
浏览 132回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java