我理解在这段代码中:
class Foo {
public static void method() {
System.out.println("in Foo");
}
}
class Bar extends Foo {
public static void method() {
System.out.println("in Bar");
}
}
Run Code Online (Sandbox Code Playgroud)
..静态方法Bar'隐藏'声明的静态方法Foo,而不是在多态意义上覆盖它.
class Test {
public static void main(String[] args) {
Foo.method();
Bar.method();
}
}
Run Code Online (Sandbox Code Playgroud)
...将输出:
在Foo
in Bar
重新定义method()为final在Foo将禁用的能力Bar,以隐藏它,并重新运行main()将输出:
在Foo
的Foo
(编辑:将方法标记为时编译失败final,并且仅在删除时再次运行Bar.method())
将静态方法声明为final有意或无意地重新定义方法的子类是否被认为是不好的做法?
(这是对使用行为的一个很好的解释final..)