Actionscript 3 类不从它们扩展的类继承静态变量吗?

Actionscript 3 类不从它们扩展的类继承静态变量吗?,actionscript-3,flash,Actionscript 3,Flash,我有一个名为debug的静态变量,我试图在类中访问该变量,该变量正在生成错误 访问可能未定义的属性调试 该属性是在基类上定义的 public class Animal { public static var debug:Boolean; } public class Meerkat extends Animal { public function Meerkat() { trace("debug:" + debug); // error here }

我有一个名为
debug
的静态变量,我试图在类中访问该变量,该变量正在生成错误

访问可能未定义的属性调试

该属性是在基类上定义的

public class Animal {
    public static var debug:Boolean;
}

public class Meerkat extends Animal {

    public function Meerkat() {
        trace("debug:" + debug); // error here
    }
}
类不能访问其超类上的静态变量吗


更新。这很奇怪。错误似乎消失了,但现在出现了一条与错误信息相同的警告

没错。静态变量不是由子类继承的。这是有文档记录的,它还建议通过声明具有相同名称的实例变量来解决这个问题。不确定这种变通方法有多有用,因为您可能会将静态变量更改为实例变量,而不是同时使用这两个变量(除非您确实需要在其他地方调用
Animal.debug
),但它是AS3,它就在那里。

这是正确的。静态变量不是由子类继承的。这是有文档记录的,它还建议通过声明具有相同名称的实例变量来解决这个问题。我不确定这种变通方法有多有用,因为您可能会将静态变量更改为实例变量,而不是将两者都更改为实例变量(除非您真的需要在别处调用
Animal.debug
),但它是AS3,它就在那里。

我尝试了一种变通方法,将我的子类上的debug声明为静态变量(不是实例),签名相同,错误消失了,一个警告出现了。稍后,当我单步执行代码时,调试变量在IDE中被设置为true,但在函数code
if(debug)
中被跳过,就好像它是false一样。这意味着基类的静态变量为true,但正在检查子类的值,这是false。在我的简短测试中似乎是这样。可能是这样,也可能不是这样,但我将从基类中删除声明,并在我的子类中声明它。@1.21千兆瓦:从变量的名称判断,也许它最好作为一个常量,或者甚至是一个(链接到FlashDevelop文档,但您可以在项目的AS3设置中的FlashIDE中设置它们)。如果您需要能够在应用程序中打开或关闭调试模式,那么它应该位于单独的类中,而不是每个子类的属性中。在某些项目中,我使用了条件编译,但在这一项目中,我需要在运行时对其进行调试,因此我不能使用条件编译。属性位于类上的原因是它扩展的类具有用于登录的方法。我可以使用一个单独的类,但因为每个类都有自己的职责,如果有意义的话,我想为每个特定的类启用或禁用很多类,但不是全局启用或禁用。我尝试了一种变通方法,将我的子类上的调试声明为静态变量(不是实例)、相同的签名,然后错误消失并出现警告。稍后,当我单步执行代码时,调试变量在IDE中被设置为true,但在函数code
if(debug)
中被跳过,就好像它是false一样。这意味着基类的静态变量为true,但正在检查子类的值,这是false。在我的简短测试中似乎是这样。可能是这样,也可能不是这样,但我将从基类中删除声明,并在我的子类中声明它。@1.21千兆瓦:从变量的名称判断,也许它最好作为一个常量,或者甚至是一个(链接到FlashDevelop文档,但您可以在项目的AS3设置中的FlashIDE中设置它们)。如果您需要能够在应用程序中打开或关闭调试模式,那么它应该位于单独的类中,而不是每个子类的属性中。在某些项目中,我使用了条件编译,但在这一项目中,我需要在运行时对其进行调试,因此我不能使用条件编译。属性位于类上的原因是它扩展的类具有用于登录的方法。我可以使用一个单独的类,但因为每个类都有自己的职责,并且有很多我想为每个特定的类启用或禁用,而不是全局启用或禁用,如果这样做有意义的话。