Показать сообщение отдельно
Старый 07.07.2011, 08:43
AirDecade вне форума Посмотреть профиль Отправить личное сообщение для AirDecade Найти все сообщения от AirDecade
  № 6  
Ответить с цитированием
AirDecade

Регистрация: Jun 2010
Сообщений: 15
Цитата:
Сообщение от goodguy Посмотреть сообщение
Есть. Отказаться от этой protected static переменной и, сделать ее public static, если уж на то пошло.
А чем это поможет? Статическая функция родителя всё равно будет писать в свою статическую переменную, а не в переменную вызвавшего эту функцию потомка. Собственно, она и была public, я неправильно написал...

Попробую объяснить для чего это, но сразу оговорюсь, я создал тему, потому что мне интересен хороший метод обращения к унаследованному static полю из родителя, а не способ решения проблемы, которую я сейчас ниже опишу.

От родителя унаследовано много разных классов. Но функции, имеющие дело с данными, которые я пытаюсь хранить в static переменных, одинаковы для всех этих классов, поэтому хочется иметь их в родителе. (Только нужно чтоб эти функции брали данные из static перменных потомка, который их вызвал, а не родителя, где находится функция).

Что можно сделать:
1)
Цитата:
Сообщение от kackbip Посмотреть сообщение
Уберите нафик static. Работайте с экземплярами.
Тогда не будет вопросов с обращением именно к полям потомка в функции родителя. Но тогда надо будет инициализировать эти экземпляры как-то. И не один раз на старте программы, а при каждом создании экземпляра потомка. А для этого их нужно изначально где-то хранить. Таким образом, возвращаемся туда, откуда пришли - где же их хранить.

2) Извращаться с getQualifiedClassName и getDefinitionByName, чтобы понять какой именно потомок вызвал функцию и обратиться к его полям.

3) Сделать класс, который будет хранить все эти данные за потомков, потомки (или родитель - становиться не важно) просто обращаются к нему за ссылкой на данные, указывая в аргументе класс, от которого ему нужны данные. Он инкапсулирует все нюансы их инициализации, что я пытаюсь запихнуть в родителя.

Наверно, третий вариант и является "правильным".
Только в моём случае он более морочный. Больше придётся переделывать. Поэтому я выбрал второй.

Цитата:
Сообщение от BuKT Посмотреть сообщение
А разве статические переменные наследуются?
As a matter of fact - наследуются.

Добавлено через 2 минуты
Цитата:
Сообщение от goodguy Посмотреть сообщение
Конечно нет. Но обращение к ним может происходить в классах потомках напрямую
мм? 0_о А как тогда ещё назвать то, что они делают?
Классы потомки могут обращаться к родительским static, но у них остаются их собственные 'унаследованные' static.