Обращение из родителя к унаследованной static переменной потомка
Есть класс-родитель и несколько унаследованных от него потомков.
Код AS3:
Код AS3:
Код AS3:
Понятно, что это можно решить, скопировав функцию setBitmap в каждый класс-потомок вместо класса родителя. Но это не правильно. (я привёл упрощённый пример, на практике setBitmap содержит много кода, хотелось бы менять его из одного места, а не из 20). Понятно, что можно использовать getQualifiedClassName в паре с getDefinitionByName, чтобы в родителе всё таки записать битмап в правильный класс. Но неужели нет более простого решения? |
Цитата:
А вообще, лично я не вижу абсолютно никакого смысла во всех этих извращениях. Может поясните, зачем это нужно на практике? Ведь обращение к статическим полям происходит в любом случае не через экземпляр класса |
Изврат полнейший. Уберите нафик static. Работайте с экземплярами.
|
А разве статические переменные наследуются?
|
Конечно нет. Но обращение к ним может происходить в классах потомках напрямую
|
Цитата:
Попробую объяснить для чего это, но сразу оговорюсь, я создал тему, потому что мне интересен хороший метод обращения к унаследованному static полю из родителя, а не способ решения проблемы, которую я сейчас ниже опишу. От родителя унаследовано много разных классов. Но функции, имеющие дело с данными, которые я пытаюсь хранить в static переменных, одинаковы для всех этих классов, поэтому хочется иметь их в родителе. (Только нужно чтоб эти функции брали данные из static перменных потомка, который их вызвал, а не родителя, где находится функция). Что можно сделать: 1) Цитата:
2) Извращаться с getQualifiedClassName и getDefinitionByName, чтобы понять какой именно потомок вызвал функцию и обратиться к его полям. 3) Сделать класс, который будет хранить все эти данные за потомков, потомки (или родитель - становиться не важно) просто обращаются к нему за ссылкой на данные, указывая в аргументе класс, от которого ему нужны данные. Он инкапсулирует все нюансы их инициализации, что я пытаюсь запихнуть в родителя. Наверно, третий вариант и является "правильным". Только в моём случае он более морочный. Больше придётся переделывать. Поэтому я выбрал второй. Цитата:
Добавлено через 2 минуты Цитата:
Классы потомки могут обращаться к родительским static, но у них остаются их собственные 'унаследованные' static. |
Цитата:
Особенно, советую обратить внимание на то, что выделенно жирным шрифтом: Static properties not inherited Цитата:
|
Я провёл тестирование наследования static переменной. Результат: при большом желании она наследуется.
Вот проект под flashDevelop с примером: http://dl.************/u/8648712/inheritanceTest.rar И вот непосредственно код: Код AS3:
Код AS3:
Код AS3:
Код AS3:
Добавлено через 5 минут Пытаясь разобраться с тем, что происходит, я пришёл к следующей теории: static переменные не наследуются, а приведённый пример работает из-за того, что в результате всех этих махинаций с definitionByName и т.п. соответствующие поля были добавлены в классы-потомки, но изначально их там не было унаследовано. |
Цитата:
п.с. я не вижу в этом коде подтверждения того, что статичные переменный наследуются. |
Цитата:
|
Часовой пояс GMT +4, время: 13:35. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.