小编典典

静态方法的行为类似于其他可以覆盖的方法

java

在子类的对象上,可以使用父类的静态方法,但是当我们在子类中定义相同的方法时,现在子类的对象开始指向子类的方法。这听起来像是覆盖了,但并非如此,因为静态方法可以t覆盖。这是怎么发生的,以及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");
    }
}

这似乎很重要,但不是.jdk如何管理它?由于我的垃圾平板电脑,我感到抱歉。


阅读 166

收藏
2020-11-30

共1个答案

小编典典

由于Aextends BA(您通过调用创建的new A())实例将具有所有方法B。因此,如果调用.method()的实例A,则VM会method()在其自身范围内首先查找,即内部的动态方法A,然后是内部的dyanmic方法B,然后是内部的静态方法A,最后是B。这是可能的,因为VM允许通过this引用访问静态方法,尽管不建议这样做,因为它会损害可读性。

2020-11-30