Recipe 2.6. Implementing Subclass Versions of Superclass Methods


Problem

You want to implement a method in a subclass differently than how it was implemented in the superclass.

Solution

The superclass method must be declared as public or protected. Use the override attribute when declaring the subclass implementation.

Discussion

Often a subclass inherits all superclass methods directly without making any changes to the implementations. In those cases, the method is not redeclared in the subclass. However, there are cases in which a subclass implements a method differently than the superclass. When that occurs, you must override the method. To do that, the method must be declared as public or protected in the superclass. You can then declare the method in the subclass using the override attribute. As an example, you'll first define a class, Superclass:

package {     public class Superclass {         public function Superclass(  ) {}         public function toString(  ):String {             return "Superclass.toString(  )";         }     } }

Next, define Subclass so it inherits from Superclass:

package {     public class Subclass extends Superclass {         public function Subclass(  ) {}     } }

By default, Subclass inherits the toString( ) method as it's implemented in Superclass:

var example:Subclass = new Subclass(  ); trace(example.toString(  )); // Displays: Superclass.toString(  )

If you want the toString( ) method of Subclass to return a different value, you'll need to override it in the subclass, as follows:

package {     public class Subclass extends Superclass {         public function Subclass(  ) {}         override public function toString(  ):String {             return "Subclass.toString(  )";         }     } }

When overriding a method, it must have exactly the same signature as the superclass. That means the number and type of parameters and the return type of the subclass override must be exactly the same as the superclass. If they aren't identical, the compiler throws an error.

Sometimes when you override a method you want the subclass implementation to be entirely different from the superclass implementation. However, sometimes you simply want to add to the superclass implementation. In such cases, you can call the superclass implementation from the subclass implementation using the super keyword to reference the superclass:

super.methodName(  );

See Also

Recipe 2.5




ActionScript 3. 0 Cookbook
ActionScript 3.0 Cookbook: Solutions for Flash Platform and Flex Application Developers
ISBN: 0596526954
EAN: 2147483647
Year: 2007
Pages: 351

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net