Классы в проекте не являются независимыми. Между ними существуют определенные отношения.
Рассмотрим два основных отношения между классами:
Классы А и В находятся в отношении наследования, если между объектами этих классов существует отношение «является».
Например, классы Квадрат и Прямоугольник.
Ясно, что эти классы связаны отношением наследования, так как «квадрат является прямоугольником». Причем, родительским классом является Прямоугольник, а дочерним Квадрат.
Классы А и В находятся в отношении агрегации, если одним из полей класса В является объект класса А.
То есть объект класса A "вложен" в класс B.
Класс А называется поставщиком класса В, класс В называется клиентом класса А.
Отношение "клиент - поставщик" называют также отношением вложенности или встраивания.
Между объектами этих классов существует отношение «имеет» или «состоит».
Например, класс стадо и класс корова.Стадо состоит из коров.
Поэтому в классе стадо в качестве поля будет существовать массив объектов класса корова. То есть класс корова вложен в класс стадо.
Когда использовать наследование и когда агрегацию(вложенность)?
Если один класс является подмножеством другого, то должно быть использовано наследование;
Если один класс является контейнером для другого, то должна быть использована вложенность.