Каждый класс в Java должен иметь конструктор, если вы его не определите, компилятор сделает это за вас и создаст конструктор по умолчанию (тот, у которого нет параметров). Если вы сами создаете конструктор, то компилятору не нужно его создавать.
Так что, даже если он наследует от Object, это не значит, что он будет иметь конструктор по умолчанию.
Когда вы создаете экземпляр AccountStudent, вам необходимо вызвать родительский конструктор.
По умолчанию, если вы не укажете родительский конструктор для вызова, он вызовет конструктор по умолчанию.
Если вы хотите явно вызвать родительский конструктор, вы сделаете это с super()
.
Существует три способа избежать ошибки:
Вызовите родительский конструктор с параметром, который вы получите от дочернего конструктора:
public class AccountStudent extends Account{
public AccountStudent(String owner){
super(String owner);
}
}
Вызовите родительский конструктор с параметром, который вы создаете сами:
public class AccountStudent extends Account{
public AccountStudent(){
super("Student");
}
}
Вызовите родительский конструктор по умолчанию, но вам нужно создать его, потому что компилятор не создаст его, если конструктор не по умолчанию уже существует. (решение, которое вы дали)