2015-06-01 96 views
2

在几乎所有的代码示例我已经遇到,用于在从JFrame派生类的方法setDefaultCloseOperation所述参数是一些恒定如JFrame.EXIT_ON_CLOSE.在这种情况下,由于是EXIT_ON_CLOSEJFrame一个常数,它可以直接访问,并且没有按不需要获取方法来访问它。为什么我们仍然以超类名称JFrame作为前缀?任何Swing类都是JFrame的子类,并且会继承EXIT_ON_CLOSE常量,为什么不直接写出方法调用setDefaultCloseOperation(EXIT_ON_CLOSE) 而不是setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)为什么JFrame.EXIT_ON_CLOSE vs EXIT_ON_CLOSE?

显式超类的名字是否真的有必要?

+2

1)不要扩展'JFrame',只要在99.9%的情况下使用实例。 2)一个更有趣的问题将是“JFrame.EXIT_ON_CLOSE”与“JFrame.DISPOSE_ON_CLOSE”,我将在那里为后者大声疾呼。 –

回答

5

EXIT_ON_CLOSE是JFrame类的静态成员,这意味着它在JFrame类的所有实例中都是相同的。

为什么指定类?

因为如果在子类中有EXIT_ON_CLOSE变量会怎么样?该变量将被用来代替。因此,为了获得静态变量的正确的int值(在这种情况下),你必须说明变量定义在哪个类中。

这与你说this.variable时寻址类变量的原因类似一类。在这里,我们只是说类名JFrame而不是this,因为变量在所有实例中都是相同的。

相关问题