在下面的代码中,当你调用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!!!!
}
}
答案 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;
它完美无缺。
有谁知道为什么?