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

时间:2015-04-18 20:49:17

标签: java static method-overriding early-binding

在子类的对象上,可以使用超类的静态方法,但是在子类中定义相同的方法的时候,现在子类的对象开始指向子类方法。这个完整听起来像重写但是不是,因为静态方法无法覆盖。如何实现这一点以及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管理它? 由于我的垃圾片,我很抱歉。

1 个答案:

答案 0 :(得分:2)

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