2013-12-18 96 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; 
    } 
} 
相关问题