【发布时间】:2010-12-17 03:42:34
【问题描述】:
我一直在使用静态方法的修饰符,遇到了一个奇怪的行为。
众所周知,静态方法不能被覆盖,因为它们与类而不是实例相关联。
所以如果我有下面的sn-p,它编译得很好
//Snippet 1 - Compiles fine
public class A {
static void ts() {
}
}
class B extends A {
static void ts() {
}
}
但是如果我在 A 类的静态方法中包含 final 修饰符,那么编译会失败 B 中的 ts() 不能覆盖 A 中的 ts();被覆盖的方法是静态的 final。
当静态方法根本无法被覆盖时,为什么会发生这种情况?
【问题讨论】:
-
看起来很奇怪,为这个问题+1,但到目前为止,没有一个答案是令人满意的。
-
它没有被覆盖。它仍然存在于 A.ts()。