Лично я не вижу проблем ни с одним из них.
Что касается дополнительных публичных методов на производных классах:
Существует ограниченная полезность в этом, во многих случаях. Дополнительные методы не будут использоваться, если класс был брошен или установлен в ссылку на базовый класс, что серьезно ограничивает полезность этой практики. Тем не менее, в этом подходе нет ничего особенного. Подклассы предназначены для добавления определенного поведения - иногда в иерархии классов в подклассе существует новое поведение, которое не подходит для базового класса. Если подкласс будет использоваться часто сам по себе, представляется вполне разумным, чтобы дополнительное поведение моделировалось в методах.
Что касается подписей конструктора -
Я не вижу никаких проблем с этим тоже. Подклассам часто требуется дополнительная информация, которая должна быть помещена в полезное состояние, чем абстрактный класс. При этом я обычно стараюсь реализовать каждый конструктор в базовом классе, а также добавить новые параметры, необходимые для подкласса.
Это, как говорится:
Если не веская причина, я бы избежать иметь конструктор подкласса с меньшим количеством параметров, чем в базовом классе ... почему бы мне быть в состоянии определить что-то на более общем случае и а не конкретный случай? Я считаю, что это обычно запутывает, когда подклассы имеют совершенно разные варианты построения, чем их базовые классы.
* EDIT * FYI, я имею в виду случай, когда вы строите объект с завода. Я утверждаю, что код вызова, в случае фабрики, должен знать, какие методы ожидать от производных классов. –