10

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

例如:

public class Test extends JFrame {

setVisible(true);

}

或者

public class Test {

JFrame test = new JFrame():

test.setVisible(true);

}
4

4 回答 4

11

您不应该扩展一个类,除非您想实际扩展它的功能,在您展示的示例中,您应该使用选项 2,因为选项 1 是对extending 功能的滥用。

换句话说-只要问题的答案是 Test a JFrame? NO,它不应该延长JFrame

于 2012-05-04T04:22:31.047 回答
9

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

  • 避免无意的方法覆盖。我已经多次涉足这一点,首先是在我讲授课程int getX()int getY()方法时。试试看,你会看到一些不那么有趣的异常行为。
  • 将使用 Eclipse 或 NetBeans 时可用的方法选项简化为仅那些您已创建的方法。这实际上是我最喜欢的优点。
  • 调整您的 GUI 以创建 JPanel 而不是 JFrame,这将部署灵活性提高了 100 倍。
  • 最重要的是,只曝光需要曝光的内容。
于 2012-05-04T04:24:17.767 回答
2

如果扩展 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);
   }
...
}
于 2012-05-04T04:33:40.417 回答
0

OOD 的规则之一:如果你不能继承(扩展)你不继承它们的类。

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

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

于 2012-05-04T04:31:01.123 回答