在actionscript 3中是否可以使用子类属性在父类的子类中使用静态变量?

时间:2014-04-01 17:31:53

标签: actionscript-3 inheritance static-members

在下面的代码中,当你调用b.method()时,你能告诉我为什么_myVar为null而g不为null?

我正在使用ActionScript3。

我错过了什么吗?

public Class A{
    protected var _myVar:Type;

    protected method(){
        _myVar // do something with _myVar...

        var g:Type = B.stVar;
    }
}

public Class B extends A{
    public static var stVar:Type;

    public B(){
        _myVar = stVar;
    }
}

public class MainClass{
    mainMethod(){
        B.stVar = new Type();

        var b:B = new B();
        b.method(); // here _myVar is null while g is not!!!! 
    }
}

2 个答案:

答案 0 :(得分:0)

这是因为您从未为变量b._myVar分配值。 B()A()B.method中没有实际为this._myVar赋值的代码,对象类型变量的默认值为null。 B.stVar已分配b.method MainClass.mainMethod(),因为其分配在B中进行,并且由于它是静态的,因此其值与_myVar的实例无关。静态变量未附加到类的任何实例,无论实例如何都可以分配它。动态("普通")变量(如A)附加到某个类的某个实例,在您的情况下,B_myVar=new Type()类实例具有此变量和在那里存储单独值的能力。

在您的情况下,您可以在public function A()中添加一个语句A,该语句将为每个B类实例分配一个值。 _myVar类实例为其public class A { protected var _myVar:Type; public class A() { _myVar=new Type(); } ... // rest of code intact } 变量分配值,因为Flash implicitly calls super() constructor用于扩展另一个的类。因此,您将此代码添加到您的结构中:

_myVar

然后,您的A将在A的每个实例以及扩展{{1}}的所有类的实例中分配。

答案 1 :(得分:0)

对我来说似乎有点尴尬,但是在B类构造函数中分配_myVar是这样的:

_myVar = stVar;

不起作用并为_myVar指定空值。 我试着这样做:

_myVar = B.stVar;

它完美无缺。

有谁知道为什么?