2
respostas

Erro na herança.

O que há de errado com este código?

class A {
    int i;
    A(int i) {}
}

class B extends A {
}

Não lembro se li no livro da Katy Sierra em que fala sobre não existir herança de construtores.

Saída:

> javac Pratica.java
Pratica.java:395: error: constructor A in class A cannot be applied to given types;
class B extends A {
^
  required: int
  found: no arguments
  reason: actual and formal argument lists differ in length
1 error
2 respostas

Boa tarde Robson, isso mesmo, quando você herda uma classe não ganha seus construtores, e quando você cria uma instancia da classe filha, chama o construtor da mãe e da filha.

Mas percebe que o construtor da mãe não é default, então precisamos chamar com o super em sua filha:

class A {
    int i;
    A(int i) {}
}

class B extends A {
    B(int i) {
        super(i);
    }
}

Deixa ver se entendi. Como não há o construtor padrão e há um aqui um caso de herança, em algum momento na história, o construtor padrão da mãe seria chamado. Logo, o compilador previne essa situação. É isso?