从子类引用静态方法是不好的做法吗?

时间:2014-05-26 01:05:23

标签: java eclipse oop inheritance

我收到IDE的警告说,

  

应该以静态方式访问JFrame类型的静态方法setDefaultLookAndFeelDecorated(boolean)

我想知道哪个更正确:
引用来自声明类(JFrame.setDefaultLookAndFeelDecorated(true);),

或继承类(MyJFrame.setDefaultLookAndFeelDecorated(true);)?

3 个答案:

答案 0 :(得分:3)

我会在声明它的类上调用该方法。

在子类上调用它也会有效,但由于静态方法无法真正被继承/覆盖,这似乎有点令人困惑。

出于同样的原因,我也避免使用与你的父类之一相同名称/签名的静态方法。

这些建议肯定“更加面向对象”,但这是我的观点:由于正常的OO思维不能很好地转化为静态方法,所以完全避开。

答案 1 :(得分:1)

JFrame.setDefaultLookAndFeelDecorated在我的视图中将是一种首选方式,因为如果使用DynamicWindow.setDefaultLookAndFeelDecorated,则该方法的来源变得不那么明显。我认为你在子类中创建了相同的方法来隐藏超类中的原始方法。

因此,对于那些阅读代码的人来说,这一点并不那么明显。

答案 2 :(得分:0)

在这种情况下,JFrame.setDefaultLookAndFeelDecorated(true);将是调用所述静态方法的适当方法。

详细说明Thilo的答案中的第三句话,你无法覆盖静态方法。它无法完成。

如果您创建一个与现有静态方法具有相同签名的新静态方法,那么您只是隐藏原始静态方法,并且使用您的代码的任何人都会感到困惑。

请记住,在静态方法的情况下,调用哪个方法取决于引用类型。在实例方法的情况下,它取决于实例类型

静态方法是代码气味。只有在您必须创建自己的方法时才使用其他静态方法。