В ответ на ответ Кейса я должен упомянуть, что «супер» НЕ всегда следует называть первым.
В идеале, параметры конструктора должны быть скопированы в переменные экземпляра класса current как можно скорее (т. Е. Перед вызовом super), поскольку они могут быть необходимы для переопределенного метода, который может вызываться суперклассом конструктор. Если эти переменные не инициализированы до вызова super, они не будут доступны для переопределенного метода. С другой стороны, super должен быть вызван до того, как вам понадобится доступ к любым экземплярам сцены.
Поэтому правильно инициализировать переменные класса current перед вызовом super, но неправильно инициализировать открытые / защищенные переменные класса super в подклассе перед вызовом super, потому что они будут сброшены при вызове super.
public class GUIControlSubclass extends GUIControl
{
private var _param:String;
public function GUIControlSubclass( param:String )
{
_param = param; //variable of this class must be assigned before calling super, so it's available to override of initLayout
_backgroundColor = 0xffffff; //it is incorrect to assign protected/public variable of super class here, since it will be reset by super call
super(); //super class constructor will call initLayout, which will call this subclass's override of it; super class constructor itself should call it's own "super" method *before* calling initLayout, to ensure stage instances are constructed and available to initLayout
}
override protected function initLayout():void
{
super.initLayout();
//IF _param WAS NOT SET **BEFORE** CALLING SUPER IN THE CONSTRUCTOR, ITS VALUE WOULD BE NULL HERE, SINCE SUPER TRIGGERS THIS METHOD, THEREFORE _param MUST BE ASSIGNED BEFORE SUPER IS CALLED
}
}