0

これは非常に奇妙な質問ですので、ご容赦ください。

Java 仕様が、2 つのサブクラスのオーバーライド メソッドがそれぞれの同じメカニズムを介して解決されることを保証しているかどうかを知りたいです。言い換えれば、私が持っている場合

public class Foo {
    public int frob() {
        return 7;
    }
}

public class Bar extends Foo {
    @Override
    public int frob() {
        return 8;
    }
}

public class Baz extends Foo {
    @Override
    public int frob() {
        return 9;
    }
}

そしてどこかにメソッド:

public static int quux(Bar b) {
    return b.frob();
}

私が知っているのは の呼び出しだけですが、 を呼び出す.frob()bはどれくらい安全quux((Bar)new Baz())ですか?

4

2 に答える 2

2

quux((Bar)new Baz())コンパイルさえしません。Baz ( IS-NOT a であるため、Baz から Bar にキャストできませんBar)。

于 2012-12-01T04:55:45.220 に答える
0

-バーIS-Aフー、バズIS-Aフー。

-しかし、Bar も Baz も Baz も Bar ではないため、このキャスティングは機能しません。

于 2012-12-01T05:13:52.357 に答える