2016-03-24 17 views
-1

私はよく理解していないコードを作成しています。私はMotherAから継承するクラスChildAを持っています。 ChildAで は、私が行いますメソッドObjective Cの継承

MotherA *theObj ; 
[theObj method1]; 
[theObj method2]; 

theObjは、両方がChildAで定義されているのに対し、私は理由を理解していない、method1ではなくmethod2を認識しています。 (私の質問がはっきりしないかどうか教えてください)。 ありがとうございました!

+0

'method1'と' method2'は 'MotherA'で定義され、' ChildA'でオーバーライドされていますか?あるいは、それらは 'ChildA'でのみ定義されていますか? – Fogmeister

+2

あなたの質問は明確ではありません。 – matt

答えて

1

theObjMotherAのインスタンスである場合、MotherAで定義されたメソッドにのみ応答します。

それはChildAのインスタンスである場合、それは、MotherAChildAに定義されたメソッドの労働組合に応答します。 2つのメソッドが同じメソッドを定義するところでは、そのインスタンスへの呼び出しはChildAの実装になります。 ChildAの実装では、superを呼び出すことによって内部的にMotherAの実装を延期することができます。

+0

メソッドの 'ChildA'実装は、私の理解が正しい場合に' ChildA'のインスタンスに対してのみ実行されます。 'MotherA'のインスタンスに対してメソッドを実行するとき、それは' Mother1'の実装を実行します。 – Fogmeister

+0

はい、私のそれははっきりしていません。固定、うまくいけば。 – Tommy

+0

申し訳ありません、私は今理解しています:D – Fogmeister

0

このコードはあまり意味がありません。

MotherA *theObj ; [theObj method1]; [theObj method2]; 

はそれが​​ではないでしょうか?またtheObj == nilとにかく何も起こりません。

method2場合にのみ、サブクラス(ChildA)とないスーパークラス(MotherA)で定義されている[super method2]を呼び出すことはできません。あなたはクラスを持っている場合は

0

...

@interface MotherA: NSObject 

- (void)method1; 

@end 

とサブクラス...

@interface ChildA: MotherA 

- (void)method2; 

@end 

は、その後あなただけの ChildAのインスタンスに method2を呼び出すことができます。 method1は、 ChildAMotherAのインスタンスで呼び出すことができます。

サブクラスは、そのスーパークラスからメソッドを継承します。その逆ではありません。

あなたがしていることは、スーパークラスがそのサブクラスのメソッドを継承することを期待しています。