【发布时间】:2012-08-02 15:03:52
【问题描述】:
我知道这是一个相当老掉牙的话题,但我需要澄清一些事情,所以请耐心等待。
静态方法与任何其他方法一样被继承,并遵循关于访问修饰符的相同继承规则(私有方法不被继承等)
静态方法不会被覆盖,它们会被重新定义。如果一个子类定义了一个与超类中具有相同签名的静态方法,则称它是隐藏或隐藏超类的版本而不是覆盖它,因为它们不像实例方法那样具有多态性。
重新定义的静态方法似乎仍然遵循一些(如果不是全部)最重要的规则。
首先,重新定义的静态方法不能比超类的静态方法受到更多的访问限制。为什么??
其次,返回类型也必须在超类和子类的方法中兼容。例如:
class Test2 {
static void show() {
System.out.println("Test2 static show");
}
}
public class StaticTest extends Test2 {
static StaticTest show() {
System.out.println("StaticTest static show");
return new StaticTest();
}
public static void main(String[] args) {
}
}
在 Eclipse 中,它在以下行显示错误:
The return type is incompatible with Test2.show()
为什么??
第三,在重新定义静态方法时是否遵循与覆盖规则相同的其他规则,这些规则的原因是什么?
提前谢谢!!
【问题讨论】:
标签: java overriding static-methods redefinition