編集:気にしないで、私はそれを理解しました。メソッドは静的であるため、変数のコンパイル時の型のみを調べ、そのインスタンス化は違いを生みません。
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();
}
これで、'Hit Miss Hit Miss' と出力されます。
なぜこれが起こっているのか分かりません。手がかりはありますか?