编辑:没关系,我想通了。由于该方法是静态的,它只查看变量的编译时类型,它的实例化并没有什么区别。
class Parent {
void sayIt() {
System.out.println("Miss ");
}
}
class Child extends Parent {
static void sayIt() {
System.out.println("Hit ");
}
public static void main(String args[]) {
Parent papa = new Parent();
papa.sayIt();
Child kid = new Child();
kid.sayIt();
papa = kid;
papa.sayIt();
kid = (Child)papa;
kid.sayIt();
}
}
这将打印“Miss Hit Hit Hit”。我明白怎么做。但是,如果我将sayIt()
方法更改为静态:
class Parent {
static void sayIt() {
System.out.println("Miss ");
}
}
class Child extends Parent {
static void sayIt() {
System.out.println("Hit ");
}
public static void main(String args[]) {
Parent papa = new Parent();
papa.sayIt();
Child kid = new Child();
kid.sayIt();
papa = kid;
papa.sayIt();
kid = (Child)papa;
kid.sayIt();
}
现在它打印“Hit Miss Hit Miss”。
我无法弄清楚为什么会发生这种情况。有什么线索吗?