2012-07-20 72 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