2010-12-03 4 views
0

Est-il possible de gérer une classe avec différents types de variables d'instance? Disons que j'ai une classe qui a deux variables d'instance int, nous allons les appeler:Types de variables d'instances multiples pour la classe?

@interface ClassA: NSObject { 
    int x; 
    int y; 
} 
@end 

En même temps, je veux l'étendre en lui donnant la possibilité de gérer un type différent sur ces variables d'instance comme ceci:

@interface ClassB: ClassA { 
    double x; 
    double y; 
} 

Est-ce encore possible?

+0

L'avez-vous essayé? –

+0

Pourquoi ne pas simplement donner un type de données id à x et y? –

+0

@Dave Delong. Je l'ai essayé, je voulais juste connaître les options autour d'elle. Je sais qu'on peut redéfinir les méthodes dans les deux classes. Je cherchais juste une meilleure explication sur la raison pour laquelle j'obtiens l'erreur en double lorsque je change les types de variables d'instance. –

Répondre

1

Je suis sûr que vous ne pouvez pas faire cela pour deux raisons:

  1. Vous ne pouvez pas répéter les variables d'instance (int x, double x).
  2. Il est plutôt difficile d'hériter d'une classe, mais de modifier le type de ses variables d'instance.

Si vous ne voulez pas créer de classes séparées pour ces cas d'utilisation, une superclasse abstraite pourrait fonctionner. Si je voulais en savoir plus sur ce que vous essayez de résoudre, je serais en mesure d'être un peu plus utile dans ce domaine. Ce que vous voulez vraiment, c'est le polymorphisme paramétrique, qui n'est pas supporté par Objective-C. Certaines classes Cocoa, comme la famille NSNumber, utilisent une super-classe abstraite avec de nombreuses sous-classes concrètes, vraisemblablement avec des configurations de variables d'instances différentes (comme vous le décrivez dans votre question). Ensuite, la logique est divisée de façon appropriée entre l'abstrait et le spécifique. C'est le modèle de conception Class Cluster, qui est une sorte de réponse ad-hoc affaiblie au polymorphisme paramétrique de langages comme C++ et Haskell.

+0

Je viens d'entrer dans obj-c, et puisque vous pouvez redéfinir des variables d'instance pour étendre les classes, je me demandais si vous pourrait également changer leurs types. –

+1

Il n'y a aucun membre dans Objective-C; juste des variables d'instance. :) – bbum

+1

Je ne savais pas que vous pouviez redéfinir les variables d'instance lors de l'extension des classes. Je me demande si vous voulez dire que vous pouvez redéfinir des instances _methods_? C'est définitivement vrai. Le problème avec les classes Objective-C, c'est qu'elles ne sont en réalité que des structures C sous-jacentes et que vous ne pouvez pas dupliquer les variables d'instance des structures. (J'espère ne pas vous égarer). –

1

Non. Vous obtenez un avertissement de compilation de "Duplicate member 'x'" et "Duplicate member 'y" ".

Questions connexes