Ошибка компиляции: конструктор A в классе A не может быть применен к заданным типам

#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 (хотя он будет вызван автоматически).