Java中的静态方法覆盖

时间:2018-01-10 10:28:36

标签: java

class B extends A {
    static public void printMe(){
        System.out.println("in static B");
    }
}
class A{
    static public void printMe(){
        System.out.println("In static A");
    }
}

public static void main(String[] args) {
        A a = new B();
        a.printMe();
    }

为什么输出"在静态A" ?

2 个答案:

答案 0 :(得分:4)

静态成员绑定到类型而不是实现类型。因此,您可以看到从A类执行的方法。

静态成员不是ovverriden,无论实例状态如何,它们都共享相同的副本。

如果您需要ovveriden方法,请不要将它们用作静态成员。

答案 1 :(得分:0)

静态成员或方法属于类级别而不是特定实例。

即使您创建多个实例或不创建实例,静态类也只有一个实例。

在您的情况下,由于您已经创建了A类的实例,因此实现了A类中的方法。

另一种简单明了问题场景的方法是尝试运行下面提到的代码:

public static void main(String[] args) {
A.printMe();
}

你会明白的想法。