Думайте об объекте Car "в реальном мире". Он может содержать ссылку на другой объект Car через номер VIN. Он может даже содержать ссылку на себя или на значение VIN 0 (NULL или NO CAR).
Но что, если вы буквально хотели, чтобы каждый объект автомобиля находился внутри другого объекта автомобиля? Как это будет работать? Какой объект Car будет содержать содержащийся объект Car?
Java и C # на самом деле не помещают объект в содержащий класс, а ссылаются на объект. Такие языки, как C ++, позволяют вам указать, есть ли ОБЪЕКТ, содержащийся в классе, ССЫЛКА на другой ОБЪЕКТ, содержащийся в классе, или даже указатель на другой ОБЪЕКТ, содержащийся в классе:
class Car
{
Engine engine; // Car CONTAINS an Engine object
};
class Car
{
Engine &engine; // Car contains a REFERENCE to an Engine object
};
class Car
{
Engine *pEngine; // Car contains a POINTER to an Engine object
};
В конце концов вы дойдете до того, что знаете, когда и зачем использовать первое, второе или третье, но это совсем другой вопрос.