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

Dúvida palavra-chave super

A minha dúvida é sobre a palavra-chave super. O super, fora chamar os atributos e métodos da super classe, também pode chamar o construtor da super classe?

7 respostas
solução!

Sim. Se você invocar o super() dentro do construtor de uma subclasse, ele invoca o construtor da superclasse.

Há outros pontos a se considerar: se você quer chamar um construtor da superclasse que recebe argumento, basta você chamar passando super(argumento).

Se você não chamar explicitamente o super(), o Java se encarrega de adicionar isso automaticamente na primeira linha do construtor de sua classe. Ele sempre adiciona uma chamada a super() sem argumentos. Nesse caso, se sua superclasse não tiver um construtor sem argumentos, o compilador irá reclamar.

Obs: se no seu construtor existe uma chamada a this() - que nesse caso, chama outro construtor da mesma classe - o Java não adiciona a chamada a super(). Ou seja, o java adiciona uma chamada a super() se não houver nenhuma chamada a super() ou this().

Esse this() você está se referindo do construtor da super classe ou da sub classe?

O this() sempre se refere a classe na qual você está chamando. No caso, a subclasse.

Exemplo: imagine que você tem dois construtores, e quando você chama o que recebe argumento, você não quer deixar de executar o que o outro construtor faz. Nesse caso, dentro de um construtor, você chama o outro. No fim, só um objeto é criado e você não precisou duplicar código para ter partes de comportamento iguais nos dois construtores.

public MainClass() {
    // faz algumas incializações
}

public MainClass(String argumento) {
    this(); // chama o comportamento padrão
    // faz algo com o argumento
}

Então, por exemplo, na minha subclasse tem 2 construtores e um dos construtores tem dentro dele o this(), então nesse construtor não pode conter o super()??

Não. Nesse construtor não, mas no outro que foi chamado por ele terá.

A primeira chamada de um construtor pode ser super() - implícito ou explícito - ou this() - sempre explícito.

Chamar super() ou this() da segunda linha em diante de um construtor dá erro de compilação.

Há entendi. Obrigado por me esclarecer minha dúvida.

Se tiver algumas dúvidas ainda, nada melhor que abrir o Eclipse e ficar testando essas coisas que conversamos aqui. Valeu!