2012-07-20 71 views
0

我正在使用这个库,我不得不在一些超类中重写一些方法。我现在所做的是扩展我需要的类,并重新定义我需要从它的超类中重写的方法。扩展图书馆中层次结构中的超类 -

class A { ... } 

class B extends A { ... } 

class C extends A { ... } 

class myD extends B { 

    protected void overriddenAfunction() { ... } 

} 

这显然是不好当几个班扩展了同超一流的,我想所有的子类使用同一个重写的方法(例如,如果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。这个库也有所有可用的源文件,所以我可以做这个或类似的东西。

回答

0

无法以使BC受益于新功能的方式覆盖A。你只有两个选择,我可以看到,和你提到他们两个:

  • 重写A和重新包装库
  • MyD延长A,然后进行扩展MyD,而不是BC副本。
+0

我可能做了一个糟糕的工作来解释这种情况。我正在使用JFreeChart(它是绘制图表的库)。它有一个类NumberAxis(A),其功能是控制轴线上的刻度线应该如何绘制。然后它得到了扩展该类的类DateAxis(B)和SymbolAxis(C)。这些类包含一些特定的功能,如设置标签的格式。我想要做的是在NumberAxis中重写方法的一些有效方法,以便DateAxis和SymbolAxis都可以使用它们。 – user1540134 2012-07-20 09:34:09