为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕慕森 2021-06-21 16:08:11
我有一个抽象类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()需要的附加方法的代码。当需要更多变化时,问题会呈指数级恶化。
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信