为什么我不能将父类中定义的静态常量视为Flex中子类的属性?
class A {
public static const MAX:int = 100;
}
class B extends A {}
A.Max; // Valid
B.Max; // Invalid
class A {
public static final int MAX = 100;
}
class B extends A {}
A.Max; // Valid
B.Max; // Valid
答案 0 :(得分:5)
为了将常量MAX
视为B
的属性,您必须重新定义MAX
并将其设置为A.MAX
:
class B extends A {
public static const MAX:int = A.MAX;
}
子类不会继承静态属性。这意味着无法通过子类的实例访问静态属性。只能通过定义它的类对象访问静态属性。例如,以下代码定义了一个名为Base的基类和一个扩展Base名为Extender的子类。名为test
的静态变量在Base类中定义。以下摘录中编写的代码不会在严格模式下编译,并在标准模式下生成运行时错误。
package {
import flash.display.MovieClip;
public class StaticExample extends MovieClip
{
public function StaticExample()
{
var myExt:Extender = new Extender();
trace(myExt.test);// error
}
}
}
class Base {
public static var test:String = "static";
}
class Extender extends Base { }
访问静态变量test
的唯一方法是通过类对象,如下面的代码所示:
Base.test;
但是,允许使用与静态属性相同的名称定义实例属性。这样的实例属性可以在与静态属性相同的类中定义,也可以在子类中定义。例如,前面示例中的Base类可以具有名为test
的实例属性。以下代码编译并执行,因为Extender类继承了实例属性。如果将测试实例变量的定义移动但未复制到Extender类,代码也将编译并执行。
package
{
import flash.display.MovieClip;
public class StaticExample extends MovieClip
{
public function StaticExample()
{
var myExt:Extender = new Extender();
trace(myExt.test);// output: instance
}
}
}
class Base
{
public static var test:String = "static";
public var test:String = "instance";
}
class Extender extends Base {}