注释:17,文件中的多个类


一般来说,当文件是一个类,但在AS3中,现在可以定义多个类文件协助主班。


类文件中的辅助类必须在类包之外定义,并且只能对文件中的主类和其他辅助类可见。


例如:


包{
类{
函数M




17,文件中的多个类


一般来说,当文件是一个类,但在AS3中,现在可以定义多个类文件协助主班。


类文件中的辅助类必须在类包之外定义,并且只能对文件中的主类和其他辅助类可见。


例如:


包{
类{
函数的MyClass(){
VaR的帮手:myhelper =新myhelper();
}
}
}
类myhelper {
函数的MyHelper(){
VaR的帮手:helpershelper =新helpershelper();
}
}
类helpershelper {
功能helpershelper(){
}
}


请注意,包中最多只能定义一个类。同一文件中的辅助类不是包块的一部分,只能在该文件中可见并使用。


18、访问属性


as3引入了两个新的类和类成员将在AS2私人访问属性访问属性。在AS3中,现在有以下访问控制特性:


公共
受保护的
私人
内部(默认)


市民:公共属性在AS2相同。公共属性定义的任何地方,任何地方都可以引用的任何成员。


构造函数必须定义为公共的。


应用程序类必须是公共的。


受保护:受保护是一个新属性。由受保护的指定的成员只能由自身或其子类访问。如果外部类试图访问受保护的成员,将引发编译错误。


类和构造函数不能声明为受保护。


已经有私人性质:AS2,但在AS2,子类的成员可以任意访问父类的私有成员。现在在AS3,私人属性只能访问内部类,和其他类,包括的子类,不能直接访问成员。也就是说,在子,一个名字可以被定义为对父类的一个成员,只要父类的该成员是私有的。


类和构造函数不能定义为私有。


内部:内部和公众是相似的。不同的是类成员只能在同一个包中的成员访问,而其他包中的成员不能访问它们。


内部是除构造函数之外的所有类和类成员的默认声明。


辅助类的访问控制是不同的,因为辅助类不属于任何包,内部声明将仅限制其访问当前文件。注意:主类不能继承辅助类,只有辅助类可以继承辅助类并处于同一文件中。


访问控制错误不仅是编译时错误,而且是运行时错误。进入2隐藏方法不能用在AS3中,如:


包{

进口flash.display.sprite;

应用程序类必须定义为公共(默认为内部)
公共类的访问控制扩展雪碧{

/构造函数总是公开的
函数的AccessControl(){

在这个文件中只能访问辅助类。
var助手:新助手();

微量(帮手。pubnum); / /好
(帮手。protnum); / / / /跟踪误差的错误,无法访问受保护的成员
(帮手。privnum); / / / /跟踪误差的错误,无法访问私有成员
微量(帮手。内口); / /好
}
}
}
默认是内部辅助类。
辅助类{

允许在任何地方访问的公共语句
将变量设置为私有,然后将set公共语句设置为访问方法。
公共变量pubnum:数量= 1;

只允许在子类中访问受保护的语句。
保护无功protnum:数量= 2;

只能在类内访问私有语句。
机车的privnum:数量= 3;

只允许在同一个包中访问内部语句。
但是对于辅助类,只能在同一个文件类中进行访问。
成份:内部VaR数= 4;

构造函数始终是公共的。
函数助手(){
}
}


子辅助类默认是内部的
可以继承其他辅助类
类subhelper延伸辅助{

、构造函数、公共
功能subhelper(){
微量(pubnum); / /好
微量(protnum) / /好;继承。
(privnum); / / / /跟踪误差不能访问私有
微量(内口); / /好
}
}


另一个例子:


包{

进口flash.display.sprite;
导入容器;

类需要公开/应用程序(默认为内部)
公共类的访问控制扩展雪碧{

始终是公共的/构造函数
函数的AccessControl(){

其他包中的访问类
如果仅公开
var碗:碗=新(碗); / ok
篮子:篮子=新的(篮子/ var);错误/不能访问内部

微量(碗。pubnum); / /好
(碗。protnum); / / / /跟踪误差不能访问受保护的
(碗。privnum); / / / /跟踪误差不能访问私有
(碗内口); / / / /跟踪误差不能访问内部
}
}
}
Actionscript代码:
包装容器{
类可访问的任何地方
公共类碗{

在任何地方授予访问权限
公共变量pubnum:数量= 1;

仅授予用于保护的访问权限
在该类中/子类中
保护无功protnum:数量= 2;

仅在该类中授予私有访问权
机车的privnum:数量= 3;

仅在同一个包中授予内部访问权限
成份:内部VaR数= 4;

始终是公共的/构造函数
函数碗(){

可以访问inteneral类如果 /包
篮子:篮子=新篮子();

微量(篮子。pubnum); / /好
(篮子。protnum); / / / /跟踪误差不能访问受保护的
(篮子。privnum); / / / /跟踪误差不能访问私有
微量(篮子。内口); / /好一包

使用公共方法克隆
无功basketcopy:篮= basket.clone();
}
}
}
Actionscript代码:
包装容器{

只有 / /内
包中的其他类
内部类篮子{

在任何地方授予访问权限
公共变量pubnum:数量= 1;

仅授予用于保护的访问权限
在该类中/子类中
保护无功protnum:数量= 2;

仅在该类中授予私有访问权
机车的privnum:数量= 3;

仅在同一个包中授予内部访问权限
成份:内部VaR数= 4;

始终是公共的/构造函数
函数篮子(){
}

只要可以访问任何地方
一个篮子实例引用
公共功能克隆():篮子{
篮子:篮子=新篮子();
basket.pubnum = pubnum; / /好
basket.protnum = protnum; / /好同一类
basket.privnum = privnum; / /好同一类
basket.internum =内口; / /好
回篮;
}
}
}


19,抽象类


不幸的是,在AS3中没有抽象类(继承,没有实例化)。所以你不能创建抽象类直接在闪光。然而,这些内置的类的一些在实际上是抽象类。包括 uff1a


显示对象
interactiveobject
displayobjectcontainer


与抽象类一样,您不能使用新关键字来创建这些类的实例:


VaR myobj时:interactiveobject =新(interactiveobject); / /错误


但是,在另一方面,您不能创建这些类的直接子类,如:


包{
进口flash.display.displayobject;
公共课mydisplay延伸DisplayObject {
公共函数MyDisplay(){
错误
}
}
}


这个类的属性与它在播放器中的定义有关。如果您创建并实例化这些类的直接子类,或者直接实例化类,就会出现参数错误。


所以,如果你想扩展一个抽象类,你可以使用扩展现有的内部小类的抽象类的方法。例如,如果你想扩展DisplayObject,您可以扩展的形状,重量轻,内部访问级别,直接对DisplayObject类。