为什么允许通过引用类的实例来调用静态方法?

时间:2016-01-11 14:11:42

标签: java inheritance static subclass superclass

假设我有2个班级。

父类:

public class ParentClass {
    public static void getInstance(){
        System.out.println("Parent method");
    }

}

ChildClass:

public class ChildClass extends ParentClass {
    public static void getInstance(){
        System.out.println("child method");
    }
public static void main(String args[]){
    ParentClass pc=new ChildClass();
    pc.getInstance();
}
}

如上所述,两个类都有一个名为getInstance()的静态方法,在java和许多其他语言中,如果有一个继承的方法,并且在子类中有相同的方法,则执行的方法是孩子班。

问题是:为什么pc.getInstance();调用父类中的方法?是的,没有方法覆盖静态方法,但任何人都可以请更多地解释pc实例的奇怪行为,为什么它引用父方法甚至它指向子类? 为什么允许通过引用类的实例来调用静态方法?

由于

1 个答案:

答案 0 :(得分:4)

静态方法没有方法覆盖。用于调用方法的实例的静态类型(示例中为ParentClass)确定调用哪个方法。

除此之外,使用实例引用来调用静态方法是不好的做法。您应该使用ClassName.methodName()来执行静态方法。