Понадобилось мне сегодня вынести мозг сделать так, чтобы наследный класс в некоторой иерархии скрывал часть методов интерфейса родителя. Т.е. для кода, который с родителем работает - чтоб все было как прежде, а вот тот код, который с дитем связан, видеть этого кошмара не должен. Ну или должен видеть только часть интерфейса из родительской иерархии. Да, можно было бы отправить часть в private. Однако тогда у нас будет скрыт не интерфейс, а реализация метода и через тот же интерфейс можно будет до реализации достучаться.

Пример ситуации

Можно попробовать в некотором классе иерархии (не корневом, т.к. надо только на 1 подкласс) обьявить скрываемый метод невиртуальным, но толку от этого все равно не будет, если в корневом классе метод объявлен виртуальным.

В результате народилась следующая идея:

Идея, надо отметить, совершенно не новая. Адаптер в его чистом виде. Скрываемые вызовы перехватываются в классе Adaptive, остальные - банально делегируются классу Adapter, где они при необходимости уходят в реализацию классов-наследников вроде Concrete_adapter.
Adaptive сделан внутренним классом, чтоб никто до него не достучался извне, ибо его задача - исключительно делегировать вызовы по виртуальным методам.