2012-04-02 10 views
1

私はいくつかのクラスSimpleButtonを持っています。それはButtonクラスの子供です。 Buttonクラスにはいくつかのメソッドがあり、SimpleButtonにオーバーライドされています。今、もし私がsimpleButtonからこのメソッドにアクセスしたいと思ったら、[super someMethod];に電話する必要がありますが、simpleButtonの外からアクセスするにはどうすればいいですか?私はあなたがそのようにそれを行うことはできませんクラスのオブジェクトへのポインタを介して "スーパー"へのアクセス

答えて

2

...

SimpleButton *button; 
[(Button*)button.superclass someMethod]; 

が、これがない作品を試してみました。サブクラスでメソッドをオーバーライドした場合、そのクラスの公開メソッドを実装のメソッドに変更しました。スーパー実装を呼び出す別のメソッドを用意する必要があります。

fooメソッドをオーバーライドしたとします。あなたはこの種のものを行う必要がある場合しかし、その後、あなたはおそらくあなたがメソッドをオーバーライドしている理由を再考する必要がある

-(void)superFoo 
{ 
    [super foo]; 
} 

:新しい方法、内部的にこれをん superFoo

[button superFoo]; 

を作成します。最初の場所。おそらく、独自の部分を行い、オーバーライドするのではなく、スーパーインプリメンテーション自体を呼び出す新しいメソッドをサブクラスで作成する必要があります。

+0

応答のためのTnx。私はすでにそれについて考えていましたが、これはちょっとダーティです。私のプログラムの論理を再考するべきだと思う。 – SentineL

関連する問題