2010-11-14 3 views
0

J'ai deux classes enfants ClassA et ClassB héritent toutes deux de la même classe de base.Fonction de substitution de classe d'appel?

J'ai aussi une fonction qui a un paramètre qui pourrait être une instance de l'une ou l'autre classe enfant. Cependant, lorsque j'exécute le test, c'est toujours le fichier BaseClass.DoSomething() qui est appelé. Comment puis-je utiliser la même fonction (DoSomething()), mais appeler la fonction de classe enfant à la place de la classe de base? méthode

Merci

+1

Pouvez-vous s'il vous plaît envoyer votre code? Vous avez un bug dedans. Je regarderai si vous publiez BaseClass et ClassA ou ClassB. –

+0

êtes-vous absent 'override' mot-clé? – alxx

Répondre

0

essayer

(instance as ClassA).DoSomething(); 
3

Vous devez saisir votre instance comme BaseClass si vous avez l'intention d'appeler soit ClassA ou ClassB

//instance is either a ClassA or ClassB instance 
function Test(instance:BaseClass):void 
{ 
    instance.DoSomething(); 
} 

Puisque vous mettre en œuvre le DoSomething() dans la BaseClass, vous pouvez remplacer la fonction dans ClassA & ClassB afin d'avoir des comportements spécifiques pour chaque classe.

//in ClassA 
    override public function DoSomething():void 
    { 
     trace('I\'m being called in ClassA'); 
    } 

    //in ClassB 
    override public function DoSomething():void 
    { 
     trace('I\'m being called in ClassB'); 
    } 

Vous pouvez essayer:

var classA:BaseClass = new ClassA(); 
    var classB:BaseClass = new ClassB(); 

    Test(classA); 
    Test(classB); 
Questions connexes