Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Почему класс не наследует статические переменные расширяемого класса? (http://www.flasher.ru/forum/showthread.php?t=146080)

FlashWizard 28.10.2010 17:08

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

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';
  }
  }
}

Я могу сделать так:
Код AS3:

trace(SuperClass.str); //ssss

А вот так что-то не срабатывает, выводит undefined:
Код AS3:

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 и введите следующий код:
Код AS3:

class Users { 
    private static var numInstances:Number = 0;
    function Users() {
        numInstances++;
    }
    static function get instances():Number {
        return numInstances;
    }
}

Введите в сценарий следующий код:
Код AS3:

trace(Users.instances); 
var user1:Users = new Users();
trace(Users.instances);
var user2:Users = new Users();
trace(Users.instances);

В следующем примере класс Users расширяется, чтобы показать, что статические переменные и методы не наследуются, но на них можно сослаться в подклассах.
Код AS3:

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

Цитата:

Сообщение от FlashWizard (Сообщение 946067)

Я могу сделать так:
Код AS3:

trace(SuperClass.str); //ssss

А вот так что-то не срабатывает, выводит undefined:
Код AS3:

trace(OtherClass.str); //undefined


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

КорДум 28.10.2010 17:45

Ну вот поэтому и сомнения.

Bgg 28.10.2010 17:56

Цитата:

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

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

FlashWizard 28.10.2010 17:59

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

cleptoman 28.10.2010 18:09

Bgg )))

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

Mur4ik 28.10.2010 18:24

Цитата:

Сообщение от КорДум (Сообщение 946070)
... пожалуется на конструктор родительского класса, ибо в нем при наследовании писать ничего нельзя.

Можно.

КорДум 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

Цитата:

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


Часовой пояс GMT +4, время: 22:58.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.