Цитата:
 Код AS3:
public class Parent
{
public var a:Boolean = false;
trace("Parent: init members");
public function Parent()
{
trace( "Parent: ctor" );
}
}
|
@silin
trace("Parent: init members"); будет вызвано 1 раз, сколько бы экземпляров не создавали. Т.е. это статическая инициализация, не уверен, что это корректная демонстрация порядка инициализации _нестатических_ переменных
Попробуем выкрутиться:

Код AS3:
class A {
protected var a:Bool = new Bool(false);
public function A() {
trace("A {");
trace("a: " + a);
trace("}");
}
}
class B extends A {
public function B() {
trace("B {");
trace("Выполняем a = new Bool(true):");
a = new Bool(true);
trace("Выполняем super():");
super();
trace("a: " + a);
trace("}");
}
}
class Bool {
private var _value:Boolean;
public function Bool(value:Boolean) {
_value = value;
trace("new Bool(" + value + ")");
}
public function toString():String {
return "[Bool(" + _value + ")]";
}
}
/*
B {
Выполняем a = new Bool(true):
new Bool(true)
Выполняем super():
new Bool(false)
A {
a: [Bool(false)]
}
a: [Bool(false)]-????????
}
*/
Выводит таки false?
Так, а если просто Boolean?

Код AS3:
class A {
protected var a:Boolean = false;
public function A() {
trace("A {");
trace("a: " + a);
trace("}");
}
}
class B extends A {
public function B() {
trace("B {");
trace("Выполняем a = new Bool(true):");
a = true;
trace("Выполняем super():");
super();
trace("a: " + a);
trace("}");
}
}
/*
B {
Выполняем a = new Bool(true):
Выполняем super():
A {
a: true
}
a: true 0_o
}
*/
Теперь уже я ничего не понимаю
