2010-11-14 3 views
0

У меня есть два дочерних класса ClassA и ClassB, которые наследуют один и тот же базовый класс.Переопределить функцию дочернего класса?

У меня также есть функция, которая имеет параметр, который может быть экземпляром либо дочерних классов.

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

Однако, когда я запускаю тест, всегда вызывает вызов BaseClass.DoSomething(). Как я могу использовать ту же функцию (DoSomething()), но вызывать функцию класса child вместо базового класса?

Благодаря

+1

Можете ли вы опубликовать свой код? У вас есть ошибка. Я посмотрю, отправляете ли вы BaseClass и ClassA или ClassB. –

+0

Вы не нашли ключевое слово 'override'? – alxx

ответ

3

Вы должны ввести свой экземпляр в качестве BaseClass, если вы собираетесь звонить либо CLASSA или ClassB

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

Поскольку вы реализовать метод DoSomething() в BaseClass, вы можете переопределить эту функцию в ClassA & ClassB, чтобы иметь конкретные поведения для каждого класса.

//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'); 
    } 

Теперь вы можете попробовать это:

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

    Test(classA); 
    Test(classB); 
Смежные вопросы