在 Java 中,父类和子类都可以有同名的静态方法。但是在这种情况下,子类中静态方法的实现隐藏了父类的实现,而不是方法覆盖。例如:
class StaticMethodTest { // 静态方法和继承 public static void main(String[] args) { Parent p = new Child(); p.staticMethod(); // 打印内部父级 ((Child) p).staticMethod(); // 打印里面的孩子 } 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()被调用。在第二种情况下,我们确实 castp到Childclass 中,Child'sstaticMethod()执行。