继承和静态方法
在 Java 中,父类和子类都可以具有相同名称的静态方法。但是在这种情况下,子进程中静态方法的实现隐藏了父类的实现,它不是方法重写。例如:
class StaticMethodTest {
// static method and inheritance
public static void main(String[] args) {
Parent p = new Child();
p.staticMethod(); // prints Inside Parent
((Child) p).staticMethod(); // prints Inside Child
}
static class Parent {
public static void staticMethod() {
System.out.println("Inside Parent");
}
}
static class Child extends Parent {
public static void staticMethod() {
System.out.println("Inside Child");
}
}
}
静态方法绑定到类而不是实例,并且此方法绑定在编译时发生。因为在第一次调用 staticMethod()
时,使用了父类引用 p
,所以调用 Parent
的 staticMethod()
版本。在第二种情况下,我们确实把 p
投入了 Child
类,Child
的 staticMethod()
被执行了。