编辑:没关系,我想通了。由于该方法是静态的,因此它仅查看变量的编译时类型,并且它的实例化没有任何区别。继承静态方法
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();
}
}
这版画 “不命中撞撞”。我明白如何。但是,如果我改变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();
}
现在它打印“命中不命中小姐”。
我无法弄清楚为什么会发生这种情况。任何线索?
静态方法属于类,而不是实例。它们不在派生类中继承。 –
你不能继承静态方法,如果你添加'@ Override'符号,你会得到一个编译错误。 – happymeal