从基础开始深入学Flash AS3教程(7)(译文)

2019-10-08 17:02:36刘景俊

}
}
}
ActionScript Code:
package containers {

// interal only accessible
// from other classes in package
internal class Basket {

// public access granted anywhere
public var pubNum:Number = 1;

// protected access granted only for
// subclasses in that class
protected var protNum:Number = 2;

// private access granted only in this class
private var privNum:Number = 3;

// internal access granted only in the same package
internal var interNum:Number = 4;

// constructors are always public
function Basket() {
}

// accessible anywhere as long as
// referencing a Basket instance
public function clone():Basket {
var basket:Basket = new Basket();
basket.pubNum = pubNum; // OK
basket.protNum = protNum; // OK - same class
basket.privNum = privNum; // OK - same class
basket.interNum = interNum; // OK
return basket;
}
}
}
19,抽象类
不幸的是,AS3中并没有抽象类(只能继承,不能实例化)。因此你不能在Flash中直接创建抽象类。但是,AS中的一些内置类实际上是抽象类。包括:

DisplayObject
InteractiveObject
DisplayObjectContainer
和抽象类一样,你不能使用new关键字创建这些类的实例。例如:
var myObj:InteractiveObject = new InteractiveObject(); //错误
但是,除此之外,在AS中,你也不能创建这些类的直接子类,例如:

package {
import flash.display.DisplayObject;
public class MyDisplay extends DisplayObject{
public function MyDisplay (){
// ERROR
}
}
}
这个类在的特性和在Player中如何定义有关。如果你创建这些类的直接子类并实例化,或者直接实例化这个类,都会出现Argument Error。
因此,如果你想扩展一个抽象类,可以采用扩展抽象类的现有的internal子类的方法。例如,如果你想扩展DisplayObject,你可以扩展Shape,一个轻量级的,internal访问级别的,DisplayObject的直接子类。