2015-06-05 2 views
2

Итак, у меня есть целая группа классов, наследующих базовый класс. Каждый класс должен иметь собственный массив некоторых значений, в основном статический массив, так как мне не нужен один для каждого экземпляра. Но поскольку статические переменные не могут быть унаследованы, я должен был бы объявить этот статический массив для каждого отдельного класса и переопределить методы, работающие в массиве (даже если метод всегда один и тот же). Единственное решение, которое я могу подумать, - использовать нестатические массивы, но тогда у меня будет дополнительный массив для каждого экземпляра. Есть ли способ обойти? Чтобы иметь только один массив для каждого класса, а не объявлять несколько одинаковых методов?Как обходить статическое наследование свойств в ООП?

+0

Статические переменные не могут быть унаследованы? –

ответ

1

я бы объявить статический массив для каждого класса

Ну, вы вроде должны делать это в любом случае. Поскольку каждому нужна своя версия массива.

Вам не нужен массив экземпляров с очевидными соображениями производительности, что имеет смысл. Но как насчет метода метода для доступа к массиву? Что-то вроде этого:

abstract class Widget 
    static array MyValues = [1,2,3] 

    abstract array GetValues 
     return MyValues 

    void DoSomething 
     // reference GetValues instead of MyValues 

Тогда в преобладающих классов:

class SpecificWidget inherits Widget 
    static array MySpecificValues = [2,3,4] 

    override array GetValues 
     return MySpecificValues 

Механика может незначительно меняться в зависимости от используемого языка, но общая идея должна работать. Каждый тип определяет метод экземпляра, который может быть переопределен, единственная цель которого - действовать как своего рода фабрика для доступа к значениям.

После абстракции, подобные этим, эти ценности могут жить в основном где угодно. В статическом массиве во внешнем кеше где-то, в базе данных и т. Д. Остальная часть кода соединяется с абстракцией, а не с хранением значений.

+0

Я думаю, что это самый простой способ, было бы неплохо сказать, что «каждый класс имеет этот массив длины N» в суперклассе, но он также сохраняет некоторое пространство, в котором те, кому нужен меньший массив, имеют разный размер для массива. – user2154768

Смежные вопросы