Я преподавал ООП и пытался передать своим ученикам важное различие между наследованием и созданием отношения подтипа между двумя типами. Например, в С++ я мог бы использовать частное наследование, чтобы гарантировать, что никто из сторон не видит отношения подтипирования.
Однако, хотя я могу представить себе множество ситуаций, когда я не хотел бы создавать отношение подтипирования (например, реализовать Stack через двусвязный класс списка), я не могу действительно думать о хороших примерах дизайна где я на самом деле решил бы следовать наследованию, не создавая публичное отношение субтирования (а не, скажем, использовать агрегацию).
Любые идеи хороших примеров?