2010-11-14 70 views
0

我有兩個子類ClassA和ClassB都繼承了相同的基類。調用覆蓋子類功能?

我也有一個函數,它有一個參數可以是任何一個子類的實例。

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

但是,當我運行測試時,總是調用BaseClass.DoSomething()。我如何使用相同的函數(DoSomething()),但是調用子類函數而不是基類?

感謝

+1

能否請您發佈您的代碼?你有一個bug。我會看看你是否發佈BaseClass和ClassA或ClassB。 – 2010-11-14 23:55:46

+0

你是否錯過'重寫'關鍵字? – alxx 2010-11-15 06:42:50

回答

0

嘗試

(instance as ClassA).DoSomething(); 
3

,如果你打算調用其中ClassA的或ClassB的

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

既然你實現DoSomething的()方法中你應該輸入您的實例作爲一個BaseClass的在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);