2016-03-24 7 views
-1

Ich arbeite an einem Code, den ich nicht sicher gut verstehe. Ich habe eine Klasse ChildA, die von MotherA erbt. In einem ChildA, ich mache:Methode Vererbung in Objective C

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

theObj method1 erkennt, aber nicht method2, während beide in ChildA definiert sind, verstehe ich nicht, warum. (Sag mir, wenn meine Frage nicht klar ist). Vielen Dank!

+0

Sind "method1" und "method2" in "MotherA" definiert und in "ChildA" überschrieben? Oder sind sie nur in 'ChildA' definiert? – Fogmeister

+2

Ihre Frage ist nicht klar. – matt

Antwort

1

Wenn theObj eine Instanz von MotherA ist, reagiert es nur auf die Methoden, die unter MotherA definiert sind.

Wenn es eine Instanz von ChildA ist, dann antwortet es auf die Vereinigung der Methoden, die auf MotherA und ChildA definiert sind. Überall dort, wo die beiden die gleiche Methode definieren, werden Aufrufe an diese Instanz von ChildA an die Implementierung gesendet. Die Implementierung von ChildA kann intern auf die MotherA Implementierung umgestellt werden, indem super aufgerufen wird.

+0

Die 'ChildA'-Implementierung der Methode wird nur für Instanzen von' ChildA 'ausgeführt, wenn mein Verständnis korrekt ist. Wenn eine Methode gegen eine Instanz von 'MotherA' ausgeführt wird, wird immer noch die Implementierung 'Mother1' ausgeführt. – Fogmeister

+0

Ja, mein 'es war nicht klar. Behoben, hoffentlich. – Tommy

+0

Ah Entschuldigung, ich verstehe jetzt: D – Fogmeister

0

ist dieser Code nicht viel Sinn machen:

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

Sollte das [super method1] nicht? Auch theObj == nil so wird sowieso nichts passieren.

Sie können nicht nennen [super method2] wenn method2 nur in der Unterklasse definiert (ChildA) und nicht der übergeordneten Klasse (MotherA).

0

Wenn Sie eine Klasse haben ...

@interface MotherA: NSObject 

- (void)method1; 

@end 

und eine Unterklasse ...

@interface ChildA: MotherA 

- (void)method2; 

@end 

Dann können Sie nur method2 auf Instanzen von ChildA nennen. method1 kann bei Instanzen von ChildA und MotherA aufgerufen werden.

Eine Unterklasse erbt die Methoden von ihrer Oberklasse. Nicht umgekehrt.

Was Sie tun (denke ich) erwartet eine Superklasse die Methoden seiner Unterklasse erben.