Java 为什么我们将静态方法重写称为方法隐藏

Java 为什么我们将静态方法重写称为方法隐藏,java,Java,这是上面的代码示例 请对此进行解释。重写方法意味着方法调用基于运行时对象的类型: 类{int foo(){return 1;} >>>类B扩展了{int foo(){return 2;}} >>>A=新的B(); >>>a.傅() 2. >>>(B)a.foo() 2. >>>B=新的B(); >>>b.foo() 2. >>>((A)b.foo() 2. 如果方法是静态的,则不会发生这种情况;静态方法不在对象上调用,而是在类上调用,您通常编写类名而不是使用对象来调用它: 类{static i

这是上面的代码示例


请对此进行解释。

重写方法意味着方法调用基于运行时对象的类型:

类{int foo(){return 1;} >>>类B扩展了{int foo(){return 2;}} >>>A=新的B(); >>>a.傅() 2. >>>(B)a.foo() 2. >>>B=新的B(); >>>b.foo() 2. >>>((A)b.foo() 2. 如果方法是静态的,则不会发生这种情况;静态方法不在对象上调用,而是在类上调用,您通常编写类名而不是使用对象来调用它:

类{static int bar(){return 1;}} >>>A.律师协会() 1. 也就是说,您可以编写一个静态方法调用,其中左侧是一个对象而不是类名,但是静态方法调用是基于该表达式的编译时类型而不是运行时的对象类型进行调度的:

类B扩展了{static int bar(){return 2;}} >>>A=新的B(); >>>a.律师协会() 1. >>>((B)a)条 2. >>>B=新的B(); >>>b.律师协会() 2. >>>((A)b.)条 1.
因此,它没有覆盖,也没有覆盖行为。

它没有覆盖,因为没有动态调度<代码>静态方法无法重写。仅供参考-有两种主要的分派形式,
静态
动态
。您可以阅读更多关于这方面的内容,事实上,当您对对象而不是类调用静态方法时,您甚至应该得到一个编译器警告(至少在Eclipse中是这样)。
class Parent {
    public static void m1() {
        System.out.println("Parent");
    }
}

class Child extends Parent {
    public static void m1() {
        System.out.println("Child");
    }
}