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

Herança e construtores

É dito na aula que os construtores NÃO são herdados eles pertencem aquela classe no qual foram criados e ponto final. Ao mesmo tempo que na classe filha ele tenta executar esse construtor da classe mãe. Ficou meio confuso, se não é herdado, por que a classe filha tenta executar? Quando é passado os mesmo parâmetros do construtor da classe mãe, a classe filha "puxa" o construtor da classe mãe, certo? Isso não seria uma "herança"a só que ao invés de ser automática seria manual?

Obrigado

3 respostas

Poderia colocar exemplo de código para analisar melhor sua dúvida, por favor.

Att.

solução!

Oi Alexandre,

A partir do momento em que você escreve um construtor na classe mãe o construtor padrão (default) deixa de existir.

Logo, quando você escreve a classe filha sem um construtor, o construtor padrão é chamado implicitamente por debaixo dos panos.

E temos que ter um construtor na classe filha que realmente invoque algum construtor existente na classe mãe.

Exemplo 1 (funciona):

Funcionario.java:

public abstract class Funcionario {

    public Funcionario(String nome) {
        System.out.println("teste");
    }
}

Gerente.java:

public class Gerente extends Funcionario {

    public Gerente() {
        super("Gabriel");
    }
}

Note que para instanciar um gerente temos que conseguir criar um Funcionario através de um construtor. Se você tirar o super("Gabriel") do construtor gerente, como o construtor default do Funcionario não existe mais, vai dar erro pois não se consegue instanciar um Funcionario, ou seja, não é possível encontrar um construtor em Funcionario que instancie um objeto do tipo Funcionario que não tenha nome. Obrigando o programador a garantir a persistência.

Note que se você adicionar outro construtor em Funcionario:

public Funcionario(){

}

A classe Gerente vai funcionar sem o super. Pois existe um construtor em Funcionario capaz de instanciar um objeto do tipo Funcionario sem um nome.

Espero ter ajudado.

Bons estudos.

Só pra acrescentar quando não se tem construtores na classe filha por debaixo dos panos é criado um construtor default que chama o chama o construtor default da classe mãe. Logo se tiver escrito algum construtor na classe mãe o default deixa de existir. Portanto a chamada implícita do super() não compila.