Appelez la méthode de la sous-classe à partir de sa superclasse
J'ai deux classes, nommé Parent
et Child
comme ci-dessous. Parent
est la super-classe de Child
je peux appeler une méthode de la super-classe à partir de son sous-classe en utilisant le mot-clé super
. Est-il possible d'appeler une méthode de la sous-classe de sa super-classe?
Enfant.h
#import <Foundation/Foundation.h>
#import "Parent.h"
@interface Child : Parent {
}
- (void) methodOfChild;
@end
Enfant.m
#import "Child.h"
@implementation Child
- (void) methodOfChild {
NSLog(@"I'm child");
}
@end
Parent.h:
#import <Foundation/Foundation.h>
@interface Parent : NSObject {
}
- (void) methodOfParent;
@end
Parent.m:
#import "Parent.h"
@implementation Parent
- (void) methodOfParent {
//How to call Child's methodOfChild here?
}
@end
Importation Parent".h" en application du délégué .m-tête de fichier.
Application du délégué application:didFinishLaunchingWithOptions:
méthode..
Parent *parent = [ [Parent alloc] init];
[parent methodOfParent];
[parent release];
source d'informationauteur Confused
Vous devez vous connecter pour publier un commentaire.
Vous pouvez, comme Objectif C méthode d'expédition est tout dynamique. Il vous suffit d'appeler avec
[self methodOfChild]
qui sera probablement générer un avertissement du compilateur (vous pouvez en silence par la couléeself
àid
).Mais, pour l'amour de la bonté, de ne pas le faire. Les Parents sont censés offrir à leurs enfants, pas les enfants pour leurs parents. Un parent de savoir à propos d'un sous-classes nouvelles méthodes est un énorme problème de conception, de la création d'un couplage fort le mauvais chemin jusqu'à la chaîne d'héritage. Si le parent a besoin, pourquoi n'est-il pas une méthode sur le parent?
Techniquement, vous pouvez le faire. Mais je vous suggère de modifier votre conception. Vous pouvez déclarer un protocole et faire de votre enfant de la classe adopter ce protocole. Ensuite, vous pouvez vérifier si l'enfant adopte le protocole de la super-classe et l'appel à la méthode de la super-classe.
Vous pouvez utiliser ceci:
Parent.m
Le parent sait à propos de l'enfant et de l'enfant a un choix sur la façon de mettre en œuvre la fonction.
super
signifie "appeler une méthode d'expédition sur la classe parent", alors pouvez utilisersuper
dans la sous-classe en raison d'une sous-classe n'a qu'un parent de la classe. Une classe peut avoir plusieurs _sub_classes bien, alors comment voulez-vous savoir la méthode de la mise en œuvre d'appel, dans le cas général? (Donc il n'y a pas une telle chose comme unsub
mot-clé.)Cependant, dans votre exemple, vous avez deux méthodes distinctes. Il n'y a rien qui vous empêche (en supposant que vous avez de très bonnes raisons pour faire quelque chose comme ça!) de dire, dans le parent,
Cela peut être fait en plus de la circonscription de la méthode dans la sous-classe. C'est créer une méthode dans la classe parent et plus de surfer sur la même sous-classe.