2

为什么我不能将父类中定义的静态常量视为 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
4

1 回答 1

5

Quick n'dirty hack:

为了将常量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 {}
于 2013-03-14T23:16:25.130 回答