PDA

Просмотр полной версии : Почему класс не наследует статические переменные расширяемого класса?


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

КорДум
28.10.2010, 17:14
Наследует, просто там пусто, трейс правильно выдает. Странно, FD такое даже не скомпилирует, пожалуется на конструктор родительского класса, ибо в нем при наследовании писать ничего нельзя.

Hidest
28.10.2010, 17:14
Хелп читаете? :)

Статические члены класса не наследуются. Невозможно сослаться на статический член класса, используя имя подкласса, что возможно в 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

КорДум
28.10.2010, 17:16
А, не наследует? Что ж, будем знать. И я не могу представить себе никакой ситуации, где бы это потребовалось. А топикстартеру хочется посоветовать не писать во FlashIDE вообще.

Hidest
28.10.2010, 17:28
КорДум

Это я топик стартеру писал :)...

FlashWizard
28.10.2010, 17:32
А топикстартеру хочется посоветовать не писать во FlashIDE вообще.
Что значит не писать во FlashIDE?

КорДум
28.10.2010, 17:33
Не писать во флеше, а использовать сторонние редакторы - FD, FDT и прочее.

FlashWizard
28.10.2010, 17:36
Я где я дал повод подумать, что я пишу во Флеше? Я использую FlashDevelop.

КорДум
28.10.2010, 17:41
И он вам дал такое скомпилировать? А как же неопределенная переменная str?

FlashWizard
28.10.2010, 17:42
Я здесь написал (на форуме). Не загоняя во Флэш.

Hidest
28.10.2010, 17:44
Я могу сделать так:
trace(SuperClass.str); //ssss

А вот так что-то не срабатывает, выводит undefined:
trace(OtherClass.str); //undefined

Извиняюсь, а компилировали вы тоже на форуме? :)

КорДум
28.10.2010, 17:45
Ну вот поэтому и сомнения.

Bgg
28.10.2010, 17:56
Извиняюсь, а компилировали вы тоже на форуме? :)

Не плохая идея кстате.

FlashWizard
28.10.2010, 17:59
Компилировал я во Флэш в своём коде. Я здесь пример просто выставил.

cleptoman
28.10.2010, 18:09
Bgg )))

кнопка "скомпилить топик" )

Mur4ik
28.10.2010, 18:24
... пожалуется на конструктор родительского класса, ибо в нем при наследовании писать ничего нельзя.
Можно.

КорДум
28.10.2010, 19:00
Mur4ik, уже перечеркнул)

Mur4ik
28.10.2010, 19:13
Ну тогда и первое предложение перечеркни ибо оно тоже ошибочно, как уже отметили, а лучше вообще удалить. ;)

FlashWizard
28.10.2010, 22:29
Значит вывод: Статика не наследуется.

iNils
28.10.2010, 22:34
Я тоже не понимаю, почему он не наследуются. Это было бы весьма удобно.

FlashWizard
29.10.2010, 13:22
Это было бы весьма удобно
А в других языках статика наследуется?