Ваш первый конструктор из Pochodna
вызывает по умолчанию super()
, конструктор, которого у вас нет в Bazowa
.
Вы должны либо вызвать один из базовых конструкторов с 1 или 2 параметрами в Pochodna()
, либо создать конструктор без параметров в базовом классе.
РЕДАКТИРОВАТЬ: Поскольку вы сказали, что изучаете Java, я добавлю некоторые дополнительные пояснения к моему ответу.
Каждый класс должен иметь конструктор, поэтому, если вы не объявляете его явно, компилятор делает это за вас, создавая конструктор по умолчанию без параметров. Этот конструктор не будет добавлен, если вы объявите конструкторы явно.
В наследовании дочерний класс является «специализацией» родителя. Это означает, что дочерний класс содержит атрибуты и поведение родительского класса и распространяется на них. Но вы не объявляете родительские элементы снова (если вы действительно не хотите перезаписывать вещи). Поэтому, когда вы создаете экземпляр дочернего элемента, элементы, взятые из родительского элемента, также должны быть инициализированы. Для этого у вас есть конструкция super(...)
.
Первое, что должно быть в дочернем конструкторе, - это вызов super(...)
, чтобы элементы, взятые у родителя, были должным образом инициализированы, прежде чем ребенок попытается что-то с ними сделать (вы также можете вызвать другой дочерний конструктор this(...)
- в этом случае последний дочерний конструктор в вызывающей цепочке будет вызывать super(...)
).
Из-за этого компилятор снова добавит вызов по умолчанию к super()
- без параметров - для вас, когда вы сами этого не делаете в дочернем элементе.
В первом конструкторе Pochodna
, поскольку вы сами не вызывали super(i)
или super(j, k)
, по умолчанию был выполнен вызов super()
. Но в родительском классе вы явно указали конструкторы, поэтому компилятор не создал значение по умолчанию. И отсюда исключение, в итоге вы вызываете несуществующий конструктор.
Надеюсь, это облегчит изучение Наследования. Приветствия.