Если flash не обнаруживает вызов super()
в вашем дочернем конструкторе, тогда flash будет неявно вызывать super()
до конструктора вашего дочернего элемента.Итак:
public class Parent {
public function Parent() {
trace("Parent");
}
}
public class Child extends Parent {
public function Child() {
trace("Child");
}
}
new Child();
// Parent
// Child
Таким образом, ваш дочерний конструктор по сути выглядит таквлияет на класс вашего ребенка.
Так зачем вам явно вызывать super()
?
Первая причина заключается в том, что flash только автоматически генерирует вызов без параметров super
, что означает, что есливаш конструктор родительских классов требует аргументов, тогда вам нужно будет явно вызвать его с этими аргументами.Если в этом случае вы пропустите вызов super(args...)
, вы получите ошибку компилятора.
Во-вторых, если даже у вашего родителя есть конструктор без параметров, вы можете использовать super()
для управления порядком, в которомКонструкторы исполняют.Flash всегда вставляет вызов перед конструктором childs.Так что, если вы хотите изменить этот порядок.Тогда
public class Child extends Parent {
public function Child() {
trace("Child");
super()
}
}
сделает это в обратном порядке.Или вы можете сделать:
public class Child extends Parent {
public function Child() {
// work before initilizing parent
super()
// work after initilizing parent
}
}
И, наконец, есть очень неясный способ не вызвать конструктор ваших родителей, сказав:
public class Child extends Parent {
public function Child() {
if(false) super()
}
}
Потому что там видит flashэто вызов, он не вставляется.Однако поскольку он стоит за if (false)
, он никогда не вызывается, поэтому родительский класс никогда не инициализируется.