关于java:有没有合理的理由隐藏静态方法?

Are there any legitimate reasons to hide static methods?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Why doesn't Java allow overriding of static methods?

是否有任何合理的理由要求派生类overridehide a staticmethod of the base class?


除了术语,Java中的静态方法确实具有一种重写关系,由二进制兼容性部分(134.12)暗示。如果t扩展s,s声明的m(),t.m()可以引用t或s中的方法,这取决于m()是否在t中声明;并且可以在不破坏调用t.m()的任何代码的情况下从t中添加或删除m()。(这意味着jvm invokestatic指令执行某种动态方法查找超级类链)

然而,这只是麻烦。如果t.m()的意思悄悄地改变了,这是非常危险的,因为现在它指向了一个不同的方法。(实例方法应继承合同,这样就不会有问题;静态方法中没有这样的理解。)

所以这个"特性"不应该被使用;语言不应该让它从一开始。

好的做法是:如果我们调用t.m(),则必须在t中声明m();并且在不首先删除所有t.m()的情况下,永远不能从t中删除它。


不能重写静态方法

为了重写方法,必须首先继承该方法。如果不继承该方法,则没有机会重写。因此,不能重写私有方法,因为它们不是继承的。