Цитата:
Сообщение от 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.