Вызов функций базового класса если была перегружена функция в наследнике как? Области видимости полей и функций класса можно поменять в наследнике? Ну и ещё Области видимости только private и public по факту.
расширение ф-ции - ошибка проектирования. если заложено проектом, то из базовой ф-ции должна вызываться суб-ф-ция, которая в базовом классе определена либо как пустая, либо поднимающая исключение если она ТРЕБУЕТ реализации в наследнике.
В целом я это и имел ввиду, Не то чтобы формально ООП совсем нет. Аскетичное ООП, привычные по другим языкам фичи отсутствуют. Из-за этого есть вопрос как канонично для языка не переизобретая ООП писать что-нибудь сложное.