【发布时间】:2012-05-05 01:13:13
【问题描述】:
到处都写着不能覆盖静态方法,但是当我尝试将访问说明符从 public 减少到 protected 时,它会出错。例如
public class StaticOverrideFunda {
public static void foo(){
System.out.println("Parent Foo");
}
}
public class B extends StaticOverrideFunda{
protected static void foo(){
System.out.println("Child Foo");
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
B.foo();
}
}
上面写着
不能降低继承方法的可见性
它遵循了最重要的规则,为什么我们说 foo 在 B 类中没有被覆盖?为什么我们说它是隐藏/阴影而不是覆盖?
【问题讨论】:
-
“它遵循最重要的规则”:false。它打破了“不能降低继承方法的可见性”条款。你的问题到底是什么?
-
在我看来,真正的问题是:禁止子类减少对“继承”静态方法的访问有什么好处?我能看到的唯一好处是 JLS 中的文本重用。
标签: java overriding