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

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


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

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