Все,Что лучше? Понижающее приведение? Интерфейс? Абстрактный класс?
Я должен делать это неправильно. В то время это казалось хорошей идеей, но, когда я углубляюсь в нее, я думаю, что есть более правильный программный способ этого. Таким образом, я прошу вас ...
1 примечание. Я использую Google AppEngine и Datastore для хранения этой информации.
Хорошо ... Позволяет сказать, что у меня есть Super Class of Vehicle, у которого есть 3 подкласса ... Автомобиль, Грузовик, Мотоцикл.
В супер класса, есть 3 свойства ... Производитель, Модель, Тип
Например, это может быть:
- Производитель: Ford
- Модель: Focus
- Тип: Автомобиль
Так что в Хранилище данных у меня есть многочисленные объекты транспортных средств с этими свойствами. Итак, если пользователь хочет увидеть все автомобили ... Я тяну каждый из них с типом «Автомобиль».
Если пользователь затем хочет добавить один из этих Транспортных средств в список «Избранное», я затем преобразую объект Vehicle в его конкретный подкласс, основываясь на его типе. Затем добавляются дополнительные свойства этого конкретного подкласса.
Этот новый дочерний объект хранится в хранилище данных с его добавленными свойствами.
Так что, в основном, я удручаю, например, от транспортного средства до автомобиля. Я сделал это, создав дополнительный constuctor в классе Car, который берет автомобиль в качестве аргумента. После создания объект «Автомобиль» теперь имеет все свойства (Производитель, Модель, Тип) и все новые свойства, которые поставляются с его конкретной реализацией.
Это просто кажется запутанным и неправильным. Это работает, но лучше всего это сделать.
Основная причина, по которой я выбрал этот путь, - это то, как работает хранилище данных GAE. Его «дешевле» хранить Суперкласс и его ограниченные свойства и запрашивать их. Длинная история.
Я пытаюсь обмотать голову, используя для этого интерфейсы и/или абстрактные классы, но я хотел получить все ваши данные.
Спасибо за помощь.