Конструкторы не наследуются. Вам нужно будет объявить конструктор в C
, который принимает аргумент. Он должен будет вызвать соответствующий конструктор суперкласса (если вы не хотите, чтобы вызываемый конструктор суперкласса был вызван).
Единственный конструктор, с помощью которого можно избежать объявления, является конструктором no-arg по умолчанию, и только в том случае, если вы не объявляете никаких конструкторов. Это потому, что компилятор будет генерировать один для вас, если у вас нет объявленных конструкторов. Компилятор всегда вставляет вызов конструктору суперкласса по умолчанию, если вы явно не вызываете конструктор суперкласса.
Обратите также внимание, что если вы явно не вызываете конструктор суперкласса и в суперклассе нет конструктора по умолчанию, вы получите ошибку времени компиляции.
EDIT: Если у вас есть «много классов, таких как класс C», то альтернативой написанию большого количества конструкторов является использование factory method pattern. Вы можете, чтобы все классы реализовали конструктор по умолчанию и предоставили отдельный метод init()
, который принимает стандартный набор аргументов. Метод factory примет объект Class<? extends C>
и некоторые аргументы инициализации, сгенерирует новый экземпляр (используя конструктор по умолчанию) и вызовет его метод init
с аргументами инициализации. Таким образом вам нужно только переопределить метод init
для тех подклассов, которым требуется специальная обработка (всегда помните, чтобы позвонить до super.init
).
Вы не можете вызвать конструктор с аргументом, не написав конструктор, который принимает аргумент. Ваш вопрос не имеет смысла. – EJP