Есть еще один вариант. По мимо наследования.
ты можешь в класс сделать включение какой то логики. Агрегировать ее.
Допустим ты можешь в класс какого то механизма передать элемент, двигатель, и управляя двигателем, ты сделаешь летающий механизм. Не обязательно наследовать, так как наследование увеличивает связанность элементов. что снижает надежность программы. + есть ограничение в вертикальное наследование, и ты не сделаешь его деревом. например обычная проблема, ты сделал игру, у тебя базовый класс gameObject который определяет кординаты, и хп юнита. Ты камеру сделал наследником от этого класса, и запустив в AOE атаку в игре, ты легко уничтожишь камеру игрока. Это проблема.