这些静态覆盖方法如何调用?

时间:2014-08-20 03:51:17

标签: java

在下面的示例中,C类扩展B,B扩展A.所有具有覆盖静态方法的类。我知道基于引用的编译时类型调用静态方法。在方法调用中表达式cm(),引用c的编译时类型是C.方法调用表达式cm()调用在类C中声明的方法m但在下一个语句中我正在移动C引用B,就像这样B b = c ;但它调用B的类静态方法,而在A的情况下也是。它基于引用权调用。

class Test {

    static void m() {
        System.out.print("A");
    }
}

class B extends Test {

    static void m() {
        System.out.print("B");
    }
}

class C extends B {

    static void m() {
        System.out.print("C");
    }
}

class D {

    public static void main(String[] args) {

        C c = new C();
//        System.out.println("c = " + c);
        c.m();
        B b = c;
//        System.out.println("b = " + b);
        b.m();
        Test a = b;
//        System.out.println("a = " + a);
        a.m();

    }
}

0 个答案:

没有答案