Flash / Flex / ActionScript/Class/Inheritance
Содержание
- 1 Add new method to the children class
- 2 A Primer on Inheritance
- 3 Call super constructor with parameter
- 4 Class Scope: Code placed at the top-level of a class body resides in that class"s scope.
- 5 Constructor Methods in Subclasses
- 6 Extends the super class
- 7 If a subclass does not define a constructor, ActionScript automatically creates one and adds a super call as its only statement.
- 8 Static Methods and Static Variables Not Inherited
- 9 Three-level inheritance
- 10 You can call the superclass implementation from the subclass implementation using the super keyword to reference the superclass:
Add new method to the children class
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var bInstance = new B( ); bInstance.m(); // Displays: Method m( ) was called bInstance.n(); // Displays: Method n( ) was called trace(bInstance.v); // Displays: 10
} }
} class A {
public var v = 10; public function m ( ) { trace("Method m( ) was called"); }
} class B extends A {
public function n ( ) { trace("Method n( ) was called"); }
} Method m( ) was called Method n( ) was called 10
</source>
A Primer on Inheritance
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){
var aInstance = new A( ); aInstance.m(); // Displays: Method m( ) was called trace(aInstance.v); // Displays: 10 var bInstance:B = new B( ); bInstance.m(); // Displays: Method m( ) was called trace(bInstance.v); // Displays: 10 } }
} class A {
public var v = 10; public function m ( ) { trace("Method m( ) was called"); }
} class B extends A { } Method m( ) was called 10 Method m( ) was called 10
</source>
Call super constructor with parameter
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){
} }
} class Ball {
private var r; public function Ball (radius) { r = radius; }
}
class ColoredBall extends Ball {
private var c; public function ColoredBall (radius, color) { super(radius); c = color; }
}
</source>
Class Scope: Code placed at the top-level of a class body resides in that class"s scope.
<source lang="java">
package {
public class SomeClass { // Code here is in the someClass scope }
} package {
public class SomeClass extends SomeParentClass { }
} package {
public class SomeParentClass { }
}
</source>
Constructor Methods in Subclasses
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){
} }
} class A {
public function A ( ) { }
} class B extends A {
public function B ( ) { // Invoke superclass"s constructor method super( ); }
}
</source>
Extends the super class
<source lang="java">
/* class ClassName extends SuperClassName {
// Class definition goes here.
}
- /
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var rBunny:Rabbit = new Rabbit("William", "White and Brown"); trace(rBunny.name); // Displays: William trace(rBunny.coloration); // Dislays: White and Brown } }
} class Mammal {
var _sName:String; public function get name():String { return _sName; } public function set name(sName:String):void { _sName = sName; }
} class Rabbit extends Mammal {
public var _sColoration:String; public function Rabbit(sName:String, sColoration:String) { _sName = sName; _sColoration = sColoration; } public function get coloration():String { return _sColoration; }
}
</source>
If a subclass does not define a constructor, ActionScript automatically creates one and adds a super call as its only statement.
<source lang="java">
class B extends A {
public function B ( ) { super( ); }
} class B extends A { }
class Rectangle {
protected var w = 0; protected var h = 0; public function Rectangle (width, height) { setSize(width, height); } public function setSize (newW, newH) { w = newW; h = newH; } public function getArea ( ) { return w * h; }
} class Square extends Rectangle {
public function Square (side) { super(side, side); } override public function setSize (newW, newH) { if (newW == newH) { super.setSize(newW, newH); } }
}
</source>
Static Methods and Static Variables Not Inherited
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var bInstance = new B( ); bInstance.s(); // Error } }
} class A {
public static function s ( ) { trace("A.s( ) was called"); }
} class B extends A {
public function B ( ) { }
}
</source>
Three-level inheritance
<source lang="java">
package{
import flash.display.Sprite; public class Main extends Sprite{ public function Main(){ var cInstance = new C( ); cInstance.m(); // Displays: Method m( ) was called cInstance.n(); // Displays: Method n( ) was called cInstance.o(); // Displays: Method o( ) was called trace(cInstance.v); // Displays: 10 } }
} class A {
public var v = 10; public function m ( ) { trace("Method m( ) was called"); }
} class B extends A {
public function n ( ) { trace("Method n( ) was called"); }
} class C extends B {
public function o ( ) { trace("Method o( ) was called"); }
}
</source>
You can call the superclass implementation from the subclass implementation using the super keyword to reference the superclass:
<source lang="java"> class Superclass { public function Superclass( ) {} public function toString( ):String { return "Superclass.toString( )"; } } class Subclass extends Superclass { public function Subclass( ) {} override public function toString( ):String { super.toString(); return "Subclass.toString( )"; } } </source>