假设我有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实例的奇怪行为,为什么它引用父方法甚至它指向子类?
为什么允许通过引用类的实例来调用静态方法?
由于
答案 0 :(得分:4)
静态方法没有方法覆盖。用于调用方法的实例的静态类型(示例中为ParentClass
)确定调用哪个方法。
除此之外,使用实例引用来调用静态方法是不好的做法。您应该使用ClassName.methodName()
来执行静态方法。