Конкретные ответы трудно, потому что они действительно зависят от особенностей вашей проблемы пространства, но в целом вы должны использовать подклассы от Car
, если все виды Car
поделились некоторыми функциями. Например:
public class Car {
public void Start() { }
}
И тогда вы могли бы иметь различные типы Car
:
public class Sedan : Car {
public void OpenAllFourDoors() { }
}
public class Coupe : Car {
public void OpenAllTwoDoors() { }
}
Вам вообще не нужно ставить иерархию классов в своем собственном пространстве имен, есть и другие наборы для указания имен определения. Как правило, ожидают, что пространства имен будут иметь форму чего-то типа CompanyName.ProductName.ModuleName или что-то подобное.
Позже, когда вам понадобится массив (или, чаще всего, коллекция) автомобилей, вы должны создать коллекцию Car
. Если вы возьмете ссылку из этой коллекции, вы не сможете получить OpenAllFourDoors
или OpenAllTwoDoors
, потому что вы не узнаете, какой подкласс Car
вы работаете.
(Извинения для C# заточенного синтаксис)
я не могу держать «своего рода» свойство в пределах каждого подкласса (значение по умолчанию на подкласс), чтобы знать, какой подкласс это? .. и какова разница между сборкой и массивом? –
@Jeremy Rudd: Вы можете, но это вообще плохая форма. Воспользуйтесь виртуальной диспетчеризацией, чтобы устранить свойство «kind», иначе вы победите одну из основных мотивов иерархии классов. Например, положите 'OpenAllDoors()' на базовый класс 'Car', а затем пусть каждая реализация определит, как открыть все двери. –
В большинстве языков OO, которые я использовал, Array - это языковая конструкция, используемая для хранения серии объектов. Коллекция (из которой существует много разных сортов) представляет собой более формальную структуру данных с понятными характеристиками производительности и интерфейсами. Например, связанный список представляет собой тип коллекции. –