#actionscript-3 #inheritance #flex4
#actionscript-3 #наследование #flex4
Вопрос:
скажем, дочерний класс наследует класс отца, а класс отца наследует класс spark TextArea. теперь из файла mxml (в FLEX4) я создаю несколько объектов дочернего класса. Класс отца имеет несколько статических атрибутов, значения которых устанавливаются частными методами, вызываемыми из конструктора. Теперь вопрос: все эти статические атрибуты устанавливаются каждый раз, когда объекты дочернего класса создаются один за другим?
Если ответ «да», то возможно ли, что статические атрибуты родительского класса устанавливаются только один раз и не зависят от количества созданных объектов дочернего класса.
Пожалуйста, предоставьте какие-либо предложения или советы
Заранее спасибо.
Комментарии:
1. Вы должны изменить «отец» на «родительский».
2. Не похоже, что у вас много переменных, поэтому я бы не стал беспокоиться. Если существует много классов, которые не используют статические переменные, я рекомендую вам разделить классы. Не наследуйте только потому, что можете.
3. @Mattias: Спасибо, но я не понимаю вашу точку зрения. не могли бы вы, пожалуйста, объяснить?
4. Я не уверен, в чем ваш вопрос или проблема. Пожалуйста, уточните.
Ответ №1:
Если вы устанавливаете статические переменные из конструктора объекта или методов, вызываемых из конструктора, то да, они будут устанавливаться каждый раз. Чтобы предотвратить это, просто проверьте, установлена ли уже переменная.
public class Foo {
public static var bar:Object;
public Foo(value:Object) {
if (!bar) {
bar = value;
}
}
}
Ответ №2:
Сначала решите, действительно ли эти статические элементы так важны для сохранения в виде статики, потому что статика связана с классом, а не с экземпляром, обычно это сигнал о том, что вы, вероятно, делаете что-то, чего делать не следует, если экземпляры изменяют или читают статические члены. Вероятно, вам следует использовать фабричный метод, если вам нужно поделиться этой информацией с экземплярами. Однако, если вы уверены, что должны это сделать, вы можете использовать блок статического инициализатора для инициализации членов при загрузке класса. Недостатком является то, что блок генерирует исключение, которое может быть трудно отследить:
public class SomeObject {
private const _someStaticMember : String;
private const _someOtherStaticMember : SomeOtherObject;
static {
_someStaticMember = "foobar";
_someOtherStaticMember = new SomeOtherObject();
}
}