静态方法表现得像其他可以覆盖的方法

static method behaving like other method those can override

在childclass的object上,superclass的静态方法是可用的,但是当我们在child[=22=中定义相同的方法时], 现在 child class 的 object 开始指向 child class method.this 完成听起来像是覆盖,但事实并非如此,因为静态方法可以'覆盖。这是怎么发生的,java 的这个功能叫什么?

class A extends B {
    public static void main(String[] args) {
        new A().method();//call class B's method if method     is not in A otherwise A's
    }

    /*
    public static void method(){
    System.out.println("class A method");
    */
}

class B {
    public static void method() {
        System.out.println("class B method");
    }
}

这似乎是压倒性的,但 not.how jdk 管理它? 由于我的垃圾平板,我很抱歉。

由于 A 扩展了 BA 的实例(您通过调用 new A() 创建)将拥有 B 具有的所有方法.因此,如果您在 A 的实例上调用 .method(),VM 首先在其自己的范围内查找 method(),即 A 中的动态方法,然后是动态方法B 中的方法,然后是 A 中的静态方法,最后是 B 中的静态方法。这是可能的,因为 VM 允许通过 this 引用访问静态方法,尽管不鼓励这样做,因为它会影响可读性。