-1

変な言い回しの質問なので、重複していたらすみません。

foomethodaを呼び出すメソッドを持つクラスがあるとしbます。

public class foo
{
    public void a()
    {
       b();
    }

    public void b()
    {
       gamma();
    }
}

今、私はbar拡張するサブクラスを持っていますfoo

public class bar extends foo
{
    @Override
    public void b()
    {
       theta();
    }
}

を呼び出す場合、スーパークラスのメソッドまたはサブクラスのメソッドbar.a()a使用しますか? つまり、最終的に実行されますか、それとも実行されますか?bbbar.b()gammatheta

4

2 に答える 2

1

サブクラスのメソッド b を使用します。これがメソッドをオーバーライドするポイントです。親を拡張するサブクラスは、メソッドのより具体的な実装を自由に作成できます。オーバーライドされたメソッドがサブクラスで呼び出されると、その特殊化されたメソッドがスーパー クラスのメソッドの代わりに使用されます。

于 2013-03-09T20:33:23.843 に答える
0

f bar.a() を呼び出します。スーパークラスの b メソッドまたはサブクラスの b メソッドを使用しますか? つまり、bar.b() は最終的にガンマを実行するのでしょうか、それともシータを実行するのでしょうか?

メソッドを使用しますbar.b()。これは動的ディスパッチの結果です。

于 2013-03-09T20:47:02.417 に答える