Herança - palavra super

:?: Uma pergunta que não quer calar! :smiley:

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”.

Sacou? :wink: