为什么允许使用对 class 实例的引用来调用静态方法?

why is it allowed to call a static method with a reference to an instance of the class?

假设我有 2 个 classes.

父类:

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

}

子类:

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();
}
}

正如你在上面注意到的那样,classes 都有一个名为 getInstance() 的静态方法,在 java 和许多其他语言中,如果有一个继承的方法并且你在子 class 执行的方法是子 class.

中的一个

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

谢谢

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

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