2013-12-18 98 views
0

我們在Java中有應用程序,我們正在使用一個庫類。在項目開始後的很長一段時間裏,我們得到了這樣一種情況:在每個函數中,我們都使用該類,我們希望在類的對象中添加一個元素(只是增加值,而不是添加任何新成員)。需要從圖書館類繼承什麼樣的照顧?

這個改變是巨大的。不難做到,但是我們已經在100多種功能中使用了這個類。

現在一個解決方案是我們可以繼承這個類,並在派生類中添加所需的更改。我們保持類的名稱相同(並且使用基類的完全限定名稱來繼承),只需更改包名,以便我們可以在代碼中使用派生類。

這種方法有什麼問題嗎?因爲我的經理的建議是「它看起來並不容易」。

請建議我是否做錯了什麼。

+1

創建庫類的子類,並在你的方法使用它似乎罰款。你可以繼續這種方法。 –

+0

它的OOP。所以它不會是一個問題,除非你的管理員不允許。 – prime

+0

@vidudaya:admins? –

回答

0

繼承是否是最佳解決方案取決於您嘗試添加的元素。如果可能的話,考慮繼承的構成。優點可以在here找到。在那裏你可以找到一個當你試圖覆蓋其中一個方法時的陷阱之一。由於您沒有庫的源代碼,因此在您的情況下更有可能。

0

只要不影響班級的原始功能,您可以對原班級進行小的更改。這是更好的主意,而不是使用與基類同名的派生類。

+0

原始類來自庫。我們沒有它的源代碼。 –

+0

在這種情況下派生類,但使用不同的名稱,我假設你正在使用Eclipse,因此使用折射器來更改所有代碼中的類的名稱。 – Jain

0

如果您要添加的只是一個變量,則這是,可能是的安全。任何更復雜的is dangerous。我沒有任何代碼可以繼續,但繼承可能不是正確的選擇。如果您創建另一個添加不同字段的子類,會發生什麼情況?幾個月後,您會意識到現在您需要兩個字段?繼承不是可組合的 - 你不能混合和匹配你在子類中做的特化。使用聚合。如果你需要一個Foo也擁有一間酒吧,然後進行同時具有foo和酒吧的簡單容器類:

class FooWithBar { 
    public final Foo foo; 
    public final Bar bar; 

    public FooWithBar(Foo foo, Bar bar) { 
     this.foo = foo; 
     this.bar = bar; 
    } 
} 
相關問題