Это не только приемлемо, но часто необходимо, чтобы конструкторы были разными. Например, если мы имеем (неизменный) Rectangle
класс и расширяем его с помощью (неизменного) Square
, конструктор Square должен быть (для использования Java на данный момент)
public Square(double size)
в то время как конструктор Rectangle
будет
public Rectangle(double width, double height)
Что должно произойти, так это то, что конструктор подкласса должен вызвать некоторый соответствующий конструктор суперкласса.
Что касается дополнительных общедоступных методов, это может зависеть от использования. Для случая Square я бы не стал добавлять никаких дополнительных методов. Однако в Java существует подкласс PrintWriter
из Writer
чья цель - добавить несколько удобных методов. В этом случае я думаю, что все в порядке (у Java, конечно, есть несколько плохих примеров, но я не думаю, что это один из них). Я также ожидал бы возможности некоторых дополнительных методов для типов контейнеров / подразделов.
Чего не следует делать, так это изменять методы суперклассов таким образом, чтобы это не соответствовало ожиданиям суперкласса.