ArsWolfBeast пишет:Значит так и должно быть. Хотя, имхо, логичнее было бы наоборот.
Как раз не логичнее.
Все наследники могут вести себя различным образом, но контракт базового класса соблюдать обязаны. Если в базовом классе был публичный метод - этот метод обязан быть во всех наследниках. Если было публичное свойство - оно обязано быть в наследнике и быть тоже публичным.
Иначе теряем все прелести наследования. Вместо лаконичного
Ведь мы знаем, что у базового класса foo - публичен и можем спокойно передавать любой подкласс.
Получится простыня условий: для объекта такого класса надо делать X, для такого - вообще невозможно, для третьего - через метод Y
И вот это - немаловажная причина почему публичные свойства - зло и должны быть геттеры и сеттеры. Их запросто в подклассе можно переопределить, будет изменение поведения, но сохранён контракт.