Просмотр полной версии : Почему класс не наследует статические переменные расширяемого класса?
FlashWizard
28.10.2010, 17:08
package {
public class SupeClass {
public static var str:String;
public function SuperClass() {
str = 'ssss';
}
}
}
package {
public class OtherClass extends SuperClass {
public function OtherClass() {
str = 'dddd';
}
}
}
Я могу сделать так:
trace(SuperClass.str); //ssss
А вот так что-то не срабатывает, выводит undefined:
trace(OtherClass.str); //undefined
Наследует, просто там пусто, трейс правильно выдает. Странно, FD такое даже не скомпилирует, пожалуется на конструктор родительского класса, ибо в нем при наследовании писать ничего нельзя.
Хелп читаете? :)
Статические члены класса не наследуются. Невозможно сослаться на статический член класса, используя имя подкласса, что возможно в Java или C++. Однако можно сослаться на статическую переменную или статический метод в пределах класса или подкласса без использования квалификатора. См. пример ниже.
Инструкцию super или ключевое слово this нельзя использовать внутри статического метода.
Следующий пример иллюстрирует использование ключевого слова static для создания счетчика, который отслеживает количество созданных экземпляров класса. Поскольку переменная numInstances является статической, она будет создана только один раз для всего класса, а не для отдельных экземпляров. Создайте новый файл ActionScript с именем Users.as и введите следующий код:
class Users {
private static var numInstances:Number = 0;
function Users() {
numInstances++;
}
static function get instances():Number {
return numInstances;
}
}
Введите в сценарий следующий код:
trace(Users.instances);
var user1:Users = new Users();
trace(Users.instances);
var user2:Users = new Users();
trace(Users.instances);
В следующем примере класс Users расширяется, чтобы показать, что статические переменные и методы не наследуются, но на них можно сослаться в подклассах.
class PowerUsers extends Users{
function PowerUsers() {
instances++; // unqualified reference to static property Users.instances is legal
}
}
trace(PowerUsers.instances); // error, cannot access static property using PowerUsers class
А, не наследует? Что ж, будем знать. И я не могу представить себе никакой ситуации, где бы это потребовалось. А топикстартеру хочется посоветовать не писать во FlashIDE вообще.
КорДум
Это я топик стартеру писал :)...
FlashWizard
28.10.2010, 17:32
А топикстартеру хочется посоветовать не писать во FlashIDE вообще.
Что значит не писать во FlashIDE?
Не писать во флеше, а использовать сторонние редакторы - FD, FDT и прочее.
FlashWizard
28.10.2010, 17:36
Я где я дал повод подумать, что я пишу во Флеше? Я использую FlashDevelop.
И он вам дал такое скомпилировать? А как же неопределенная переменная str?
FlashWizard
28.10.2010, 17:42
Я здесь написал (на форуме). Не загоняя во Флэш.
Я могу сделать так:
trace(SuperClass.str); //ssss
А вот так что-то не срабатывает, выводит undefined:
trace(OtherClass.str); //undefined
Извиняюсь, а компилировали вы тоже на форуме? :)
Ну вот поэтому и сомнения.
Извиняюсь, а компилировали вы тоже на форуме? :)
Не плохая идея кстате.
FlashWizard
28.10.2010, 17:59
Компилировал я во Флэш в своём коде. Я здесь пример просто выставил.
cleptoman
28.10.2010, 18:09
Bgg )))
кнопка "скомпилить топик" )
... пожалуется на конструктор родительского класса, ибо в нем при наследовании писать ничего нельзя.
Можно.
Ну тогда и первое предложение перечеркни ибо оно тоже ошибочно, как уже отметили, а лучше вообще удалить. ;)
FlashWizard
28.10.2010, 22:29
Значит вывод: Статика не наследуется.
Я тоже не понимаю, почему он не наследуются. Это было бы весьма удобно.
FlashWizard
29.10.2010, 13:22
Это было бы весьма удобно
А в других языках статика наследуется?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.