#java #inheritance #constructor
#java #наследование #конструктор
Вопрос:
Я хочу инициализировать переменные экземпляра с помощью конструкторов, но я получаю ошибку компиляции.
class Test{
public static void main(String[] args){
A a = new A(5,6);
System.out.println(a.i);
}
}
class A{
int i, k;
A(int a, int b){
this.i=a;
this.k=b;
}
}
class B extends A{
int k;
B(int a, int b, int c){
this.k = a;
}
}
Ошибка:
Test.java:26: error: constructor A in class A cannot be applied to given types;
B(int a, int b, int c){
^
required: int,int
found: no arguments
reason: actual and formal argument lists differ in length
1 error
Ответ №1:
Вы пропускаете super
вызов B
. Вы можете исправить это, используя
class B extends A{
int k;
B(int a, int b, int c){
super(a,b);
this.k = a;
}
}
Также вы, вероятно, хотели использовать this.k = c
.
Комментарии:
1. хорошо, спасибо, это работает, но инициализация родительских переменных в дочернем конструкторе обязательна.
2. @Dr.Sikandar нет.
Ответ №2:
Ну, ваша проблема в том, что вы не можете создать объект B, не создав сначала объект A. Если бы у вас был конструктор по умолчанию в A, вам не нужно было бы вызывать super в B (хотя он будет вызван автоматически).