为什么允许使用对 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()
来执行静态方法。
假设我有 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()
来执行静态方法。