Flash CS3 静态属性和作用域链
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Flash CS3 静态属性和作用域链
虽然并不继承静态属性,但是静态属性在定义它们的类或该类的任何子类的作用域链中。同样,可以认为静态属性在定义它们的类和任何子类的“作用域”中。这意味着在定义静态属性的类体及该类的任何子类中可直接访问静态属性。
下面的示例对上一个示例中定义的类进行了修改,以说明Base 类中定义的test 静态变量在Extender 类的作用域中。换句话说,Extender 类可以访问test 静态变量,而不必用定义test 的类名作为变量的前缀。package
{
import flash.display.MovieClip;
public class StaticExample extends MovieClip
{
public function StaticExample()
{
var myExt:Extender = new Extender();
}
}
}
class Base {
public static var test:String = "static";
}
class Extender extends Base
{
public function Extender()
{
trace(test); // 输出:静态
}
}
如果使用与同类或超类中的静态属性相同的名称定义实例属性,则实例属性在作用域链中的优先级比较高。因此认为实例属性“遮蔽”了静态属性,这意味着会使用实例属性的值,而不使用静态属性的值。例如,以下代码显示如果Extender 类定义名为test 的实例变量,trace() 语句将使用实例变量的值,而不使用静态变量的值:
package
{
import flash.display.MovieClip;
public class StaticExample extends MovieClip
{
public function StaticExample()
{
var myExt:Extender = new Extender();
}
}
}
class Base
{
public static var test:String = "static";
}
class Extender extends Base
{
public var test:String = "instance";
public function Extender()
{
trace(test); // 输出:实例
}
}