3

次の 3 つのクラスがあるとします。

class Foo {
    void fn() {
        System.out.println("fn in Foo");
    }
}

class Mid extends Foo {
    void fn() {
        System.out.println("fn in Mid");
    }
}

class Bar extends Mid {
    void fn() {
        System.out.println("fn in Bar");
    }

    void gn() {
        Foo f = (Foo) this;
        f.fn();
    }
}

public class Trial {
    public static void main(String[] args) throws Exception {
        Bar b = new Bar();
        b.gn();
    }
}

を呼び出すことは可能Fooですfn()か? が type のオブジェクトを指しているため、 のソリューションがgn()機能しないことはわかっています。thisBar

4

1 に答える 1

5

Javaではできません。使用できますsuperが、常に型階層の直下のスーパークラスのメソッドを使用します。

また、次の点にも注意してください。

Foo f = (Foo) this;
f.fn();

は、仮想呼び出しがどのように機能するかのまさにポリモーフィズムの定義です。fタイプは ですFooが、実行時f.fn()に にディスパッチされBar.fn()ます。コンパイル時の型は関係ありません。

于 2011-11-26T19:48:23.833 に答える