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

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

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

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

也就是说,当您希望子类将特定于项目的function添加到Frame(例如方便方法等)时,子类化应该没有问题,其中将使用子类而不是Frame本身,但通常用作框架,而不是应用程序中特定框架的视图。

更喜欢inheritance的组合。 所有通常的原因。 组合强制代码之间的依赖性较小。

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

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

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

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

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

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