Общий контракт для разных классов
Почему Shipping можно передать в addChargeableItem(), если метод принимает Chargeable, а Shipping не наследует ShopProduct?
Что проверяет это задание
Интерфейс объединяет классы по общей возможности, даже если они находятся в разных иерархиях наследования.