Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida sobre Classes herdadas e construtores

Olá neste exemplo tenho duas classes A e B, onde A extends B, cada uma com seu construtor devidamente implementado, mas observei que mesmo quando crio um objeto da classe A o construtor da classe B ainda é invocado, visto que a saída do programa é

qtdA::1
qtdB::2

O programa é

package certificacao;

class B{
    private static int qtdB;

    B(){
        qtdB++;
    }
    public static int getQtd(){
        return qtdB;
    }
}

class A extends B {
    private static int qtdA;
    A(){
        qtdA++;
    }
    public static int getQtd(){
        return qtdA;
    }
}

public class TestaConstrutor{
    public static void main(String... args){
        A a = new A();
        B b = new B();

        System.out.println("qtdA::"+A.getQtd());
        System.out.println("qtdB::"+B.getQtd());
    }
}

Por que isso acontece, mesmo quando não chamo super(); no construtor da classe A?

Obrigado

3 respostas
solução!

Oi Lucas, a chamada do construtor da classe B acontece por que para construir o objeto A ele precisa garantir que toda a estrutura que foi herdada de B foi iniciada, Por isso quando você compila a classe A o javac coloca a chamada do super() implicita para você, chamamos isso de Constructor Chaining. Para mais detalhes você pode olhar esse link:

https://www.thoughtco.com/constructor-chaining-2034057

Espero ter ajudado. Abraços e bons estudos.

É da linguagem... sempre o construtor da classe mãe vai ser chamado.. vc deixando isso claro ou não.

Obrigado, entendi perfeitamente.