Java: наследовать конструктор

Я хочу иметь конструктор с аргументом, который автоматически наследуется всеми дочерними классами, но Java не позволит мне сделать это

class A {
    public A(int x) {
     // Shared code here
    }
}

class B extends A {
    // Implicit (int x) constructor from A
}

class C extends A {
    // Implicit (int x) constructor from A
}

Я не хочу писать B(int x), C(int x) и т.д. для каждого дочернего класса. Существует ли более разумный способ решения этой проблемы?

Решение №1. Создайте метод init(), который можно вызвать после конструктора. Это работает, хотя для моего конкретного проекта я хочу, чтобы пользователь указывал определенные параметры в конструкторе, которые проверяются во время компиляции (например, не через varargs/reflection).

Ответ 1

Вы не можете. Если вы хотите иметь параметризованный конструктор в вашем базовом классе - и конструктор без аргументов - вам нужно будет определить конструктор (и вызвать конструктор super()) в каждом из классов потомков.

Ответ 2

Другие ответы верны, что Java не позволит вам наследовать конструкторы. Но IDE можно использовать для облегчения огромного бремени их создания для всех ваших классов.

В Eclipse перейдите в меню "Source" и выберите "Generate Contructors from Superclass...". Вы также можете выбрать это в качестве опции при использовании диалога для создания нового класса.

Ответ 3

Наследование

РЕЗЮМЕ: Подкласс наследует все члены (поля, методы и вложенные классы) из своего суперкласса. Конструкторы не являются членами, поэтому они не наследуются подклассами, но конструктор суперкласса может вызывается из подкласса.

Ответ 4

Вы не можете в java. Вы не можете дать аргументы метода без явного объявления их в методе. Выполнение этого, вероятно, не было бы лучшей идеей, это могло бы привести к очень запутанному коду и чрезмерно усложнить ситуацию. Альтернативой тому, чтобы вводить несколько дополнительных символов, является , что плохо.: D

Ответ 5

Если у вас есть значение по умолчанию, которое вы хотите назначить, вы можете создать пустой конструктор в базовом классе, который вызывает параметризованный конструктор.

Это позволит удалить дочерние классы для вызова параметризованных конструкторов.