0

編集:気にしないで、私はそれを理解しました。メソッドは静的であるため、変数のコンパイル時の型のみを調べ、そのインスタンス化は違いを生みません。

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' と出力されます。

なぜこれが起こっているのか分かりません。手がかりはありますか?

4

3 に答える 3

0

まず第一に、質問は静的メソッドを継承するべきではありませんでした。継承は静的メソッド用ではありません。

静的メソッドにアクセスするためにインスタンスを作成する必要はありません。

用途Parent.sayIt()- Parent.java に記述された static メソッドへのアクセス用

用途Child.sayIt()- Child.java に記述された static メソッドへのアクセス用

于 2013-10-28T07:51:09.747 に答える