Tive dando uma olhada no forum e em agluns livros que tenho, porém quando fui extender uma classe me sugiu uma dúvida.
:arrow: Porque eu tenho que usar [color=“olive”]boolean b = super.aaXaaa()[/color] se dentro da classe filha posso usar apenas [color=“olive”]boolean b = aaXaaa()[/color], qual é o objetivo real?
Seria uma forma de eu dizer que estou chamado exatamente o método da superclasse, é uma espécie de “boas práticas de programação” ou tem outro significado bem mais complexo? ( :idea: por que alguma coisa me diz que é a última opção?)
isto é mais usado em casos de override, onde uma subclasse sobrescreve um método da superclasse, por exemplo:
Se vc não colocar o “super” o método chamado é sempre o da subclasse
class Pai
{
void metodoDoPai(){
System.out.println("pai");
}
}
public class Filho extends Pai
{
void metodoDoPai()
{
System.out.println("filho");
// chama o método da classe mãe
super.metodoDoPai();
}
void teste()
{
metodoDoPai();
}
public static void main(String[] args)
{
Filho f = new Filho();
f.teste();
}
}
:idea: Saquei, a palavra [color=“olive”]super[/color] teria então a mesma função da palavra [color=“olive”]this[/color] sendo que uma é para classes e outra para métodos.
Mais ou menos. “super” tem mais ou menos o mesmo funcionamento do “this”, mas “super” quer dizer “a minha superclasse” e “this” quer dizer “esta classe”.