Прежде всего, позвольте мне уточнить, что я знаю, что вы не можете иметь фактические абстрактные классы в Objective-C. Когда я говорю абстрактное, я имею в виду, что я не создаю никаких экземпляров класса, но просто использую его как базовый класс для наследования.Использование констант в абстрактных классах Objective-C?
Мой абстрактный класс содержит NSInteger. Все классы, унаследованные от этого абстрактного класса, должны будут использовать это целое число. После установки NSInteger никогда не будет изменен. Значение NSInteger, хотя и будет зависеть от производного класса. Поскольку он никогда не будет изменен, я хочу сделать переменную const. Дело в том, что если я сделаю это const, мне нужно будет установить значение при создании экземпляра. Поэтому мне нужно было бы установить значение в базовом абстрактном классе, однако я не могу настроить значение на основе производного класса, которым он существует.
Я понимаю, что это трудно понять, поэтому я создал некоторый базовый псевдокод. Я использовал NSString в качестве примера, но в моей программе это NSInteger:
Class animal: const NSString soundItMakes = "Sound" //the constant integer
//since soundItMakes is const I have to set it upon instantiation even though it doesn't make sense in the base class
Class dog: animal //derives from animal. Needs to change the const soundItMakes to fit a dog however since it was already set in animal, the base class, I can't really change it
Class cat: animal //derives from animal. Needs to change the const soundItMakes to fit cat however since it was already set in animal, the base class, I can't really change it.
Я не хочу, чтобы удалить переменную из базового класса и вместо того, чтобы положить его в каждом производном классе я не хочу, чтобы он непостоянен. Кто-нибудь видит решение этого? Я понимаю, что это сбивает с толку, поэтому, если требуется дополнительная информация, не стесняйтесь спрашивать.
Я использую Cocoa в Xcode 3.2.6 в Mac OS X Snowleopard.
Почему бы просто не определить свойство readonly на вашем суперклассе, тогда каждый подкласс может реализовать метод getter, чтобы вернуть то, что им нужно. Это было бы каноническим способом OO, чтобы сделать это, я думаю, если я полностью не упустил вашу точку зрения. –
Почему он должен оставаться переменной? Что мешает вам сделать метод, который возвращает его? – zneak