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

Tho*_*ens 25 java inheritance swing components

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

Yis*_*hai 23

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

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

话虽这么说,当您打算将子类添加到Frame的项目特定功能(例如方便方法等)时,子类化应该没有问题,其中将使用子类而不是Frame本身,但通常用作框架,而不是应用程序中特定框架的视图.


Tom*_*ine 9

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

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

  • isValid是意外覆盖的经典之作 (4认同)