为什么不扩展JFrame和其他组件?

时间:2009-07-17 15:16:39

标签: java swing inheritance components

我已经看到过这里出现过几次,但在我看过的帖子中,没有人解释过。为什么我不应该扩展JFrame(或任何组件)?是否存在我应该扩展组件的条件,或者这是一个你不遵守的坚定规则?

5 个答案:

答案 0 :(得分:23)

一般来说,扩展组件往往是严格要求使用组件。这在设计方面以不必要的方式严重限制了您的选项,因此您的类不能扩展不同的类,您无法隐藏JFrame的方法,导致它更难以维护,并且在使用类时更容易触发意外错误

通常,目的是严格使用类来绘制框架,并且组合优先于继承。

话虽这么说,当您希望子类将特定于项目的功能添加到Frame(例如方便方法等)时,子类应该没有问题,其中将使用子类而不是Frame本身,但是用作一般情况下,不是应用程序中特定帧的视图。

答案 1 :(得分:9)

首选组合而不是继承。所有通常的原因。组合强制代码之间的依赖性较小。

Swing和事件AWT,组件非常复杂。你不想陷入那种混乱。您可以轻松地轻易覆盖方法。如果您确实需要覆盖方法,如果它是普通代码,很难看到它在哪里完成。

答案 2 :(得分:4)

如果您的应用程序真的只是一个JFrame,请继续并扩展它。但是,如果您只是使用 JFrame,最好使用对象组合而不是继承。

如果你的对象扩展了其他一些对象,你就别无选择,作为一个例子。

答案 3 :(得分:2)

只要您扩展类并且可以保留继承的“is-a”方面,我就不会看到问题。

当你扩展JPanel但你的新对象不是JPanel的真正专业化时,那就是你遇到麻烦的地方。但是,如果您创建一个扩展SpeciallyFormattedJLabel的新JLabel,我认为没有问题。

答案 4 :(得分:0)

我知道这是一篇很老的帖子,但我刚刚遇到它并且我要告诉你......扩展限制我调用该对象的某些动作的选项。我现在正在重写代码的某些部分,以消除延伸造成的损害。除非我正在编写单文件程序,否则我不会再使用扩展程序。