1

Foo私はクラスのサブクラスを持っていますBar:

@interface Foo : Bar
{ 
- (void)methodName;
}

クラスのメソッドmethodNameをオーバーライドするメソッドがあります。Bar

のスーパークラスのオブジェクトがありますFoo:

Bar *bar = [[Bar alloc] init];

次に、このオブジェクトにメッセージを送信します。

[bar methodName];

の代わりにFooの実装が実行されるのはなぜですか? でのこのメソッドの実装は、 での実装を完全にオーバーライドし、を呼び出しません。オブジェクトがサブクラスの場合、サブクラスの実装が呼び出されることは明らかですが、メッセージがスーパークラスのオブジェクトに送信されたときに実行されるのはなぜですか?methodNameBarFooBar[super methodName]

前もって感謝します。

4

2 に答える 2

5

そうであってはなりません。実際に Bar のインスタンスがあることを確認するために、[bar class]前に呼び出しを試してみることをお勧めします。[bar methodName]それが本当に Bar のインスタンスである場合、Foo サブクラスのメソッドを呼び出している可能性があるとは考えられません。

于 2013-08-21T20:22:22.373 に答える