扩展JFrame

扩展JFrame而不是创建新的JFrame有什么优缺点?

例如:

public class Test extends JFrame { setVisible(true); } 

要么

 public class Test { JFrame test = new JFrame(): test.setVisible(true); } 

您不应该扩展类,除非您想要实际扩展其function,在您显示的示例中,您应该使用选项2,因为选项1是滥用extendfunction。

换句话说 – 只要问题的答案是Test a JFrameNO ,它不应该扩展JFrame

不扩展JFrame(或任何Swing组件)的优点:

  • 避免无意的方法覆盖。 我已经多次介入这个,首先是我给了我的类int getX()int getY()方法。 尝试一下,你会看到一些不那么有趣的exception行为。
  • 将Eclipse或NetBeans仅用于您创建的方法时,简化可用的方法选项。 这实际上是我最喜欢的优势。
  • 使用GUI来创建JPanel而不是JFrame,从而将部署灵活性提高了100倍。
  • 最重要的是,只暴露需要暴露的东西。

如果扩展JFrame,我想修改/自定义我当前的Jframe类,因此子类可以使用这个自定义的实现。

如果在JFrame类中没有任何我想要做的更改,只需使用您在代码中给出的第二个片段中的现有内容。 通过使用,我的意思是在JPanel中创建其他JComponent(示例的按钮/标签)等,并创建一个对象Test并将JFrame contentPane设置为此对象。 就像是

 public class Test extends JPanel { public class() { // add buttons/label here } ... private static void createAndShowGUI() { JFrame frame = new JFrame(); Test object = new Test(); frame.setContentPane(object.setOpaque(true)); frame.setVisible(true); } ... } 

OOD的一个规则:如果你不能inheritance(扩展)你不inheritance它们的类。

inheritance增加了程序的复杂性和连通性,并可能导致新的错误。 在你的情况下,没有任何理由扩展课程。

只有在需要访问受保护成员和/或获取多态行为(覆盖虚拟方法)时,才应扩展类。