2010-04-07 5 views
2

J'ai des problèmes pour comprendre ce qui se passe dans l'exercice suivant, j'apprends Smalltalk, donc je suis novice.Problèmes avec les classes (super nouveau)

Classe A >> new ^ nouvelle initialisation.

A >> initialiser a: = 0.

Classe B >> nouveau: aParamètre | instance | instance: = super nouveau. instance b: instance a + aParamètre. ^ instance

B >> initialiser b: = 0.

Le problème dit ce qui se passe lorsque le code suivant est exécuté:

B nouveau: 10.

Mais je ne peux pas comprendre pourquoi la variable d'instance n'appartient pas à une classe.

Merci

+0

Qu'est-ce que vous voyez qui est inattendu? Avez-vous une erreur? Je ne comprends pas votre dernière phrase. Quelle variable d'instance n'appartient pas à A (ou A class?) Qui devrait l'être? –

+0

Quand j'exécute le code (B new: 10.) J'obtiens une erreur disant que la méthode + n'est pas définie, et la classe de la variable d'instance est B, pas A (la super classe de B), c'est pourquoi je suis confus. Pour être plus propre, je ne sais pas pourquoi lorsque le code s'exécute: instance: = super nouveau. La classe de la variable d'instance est B et je ne peux pas exécuter l'étape suivante. – Gonzalo

+0

+1 pour trouver et réparer votre propre problème. –

Répondre

3

j'ai découvert le problème, le manque de super initialize, lorsque le code a été exécuté le initialiseur de "instance: = super nouvelle." était le initialiseur de la classe B, c'est pourquoi le var n'a pas été initialisé Un exemple, le code suivant résoudre le problème:

B >> initialize

super initialize.

b: = 0.

+0

Je l'avais remarqué, mais parfois c'est exactement ce que vous voulez. Heureux de vous entendre réglé votre problème! –

Questions connexes