Overcasted superclass method not triggering subclass' method

Ok,

Say I have a class called Animal that has a method foo() and I call it out within the Animal class.

protected function foo():void
{
    trace("Animal");
}

I also have a class called Cat that extends Animal and overrides the method foo()

override protected function foo():void
{
     trace("Cat");
}

However when calling the function foo() from the superclass it traces out Animal not Cat (using a Cat object).
How can I make superclass call out methods in the subclass?