在库中的类层次结构中间扩展超类

时间:2012-07-20 09:08:39

标签: java design-patterns subclass superclass

我正在使用这个库,我必须在一些超类中覆盖一些方法。我现在所做的是扩展我需要的类,并重新定义我需要从它的超类中重写的方法。

class A { ... }

class B extends A { ... }

class C extends A { ... }

class myD extends B {

    protected void overriddenAfunction() { ... }

}

当几个类扩展相同的超类并且我希望所有子类都使用相同的override方法时(例如,如果C也需要相同的overridenAFunction()定义),这显然不是很好。

是否有一些设计模式或方法使这个漂亮?我想你可以做这样的事情:

class A { ... }

class B extends A { ... }

class C extends A { ... }

class myD extends A {

    private A BorC = null;

    public myD(A BorC) {

        this.BorC = BorC;

    }

    protected void overriddenAfunction() { ... }

    public void overriddenBfunction() { 

        ((B) BorC).overriddenBfunction();

    }

    public void overriddenCfunction() { 

        ((C) BorC).overriddenCfunction();

    }

}

Usage:

A testB = new myD(new B());
A testC = new myD(new C());

然而,如果它工作的话,我需要把B和C中的每个方法都放进去。

有更好的方法或解决方法吗?我想做的就是避免重新打包库,虽然我猜它真的是最好的解决方案吗?

我想我也可以制作B和C的副本,并在myD扩展A时扩展myD。这个库也有所有可用的源文件,所以我可以这样做或类似的东西。

1 个答案:

答案 0 :(得分:0)

无法以允许AB从新功能中受益的方式覆盖C。您只有两个我可以看到的选项,您可以同时提到它们:

  • 重写A并重新打包库
  • MyD延长A,然后制作BC的副本,而不是MyD