Devo sempre usar a palavra chave super para indicar que o atributo ou método é da classe mãe? Pois escrevi a classe filha sem o super e o código compilou com o mesmo resultado de quando uso o super.
Devo sempre usar a palavra chave super para indicar que o atributo ou método é da classe mãe? Pois escrevi a classe filha sem o super e o código compilou com o mesmo resultado de quando uso o super.
Olá Thiane, tudo bem com você?
Isso, sempre é indicado utilizar o super
, para garantir o uso do método ou atributo da classe mãe. Caso contrário pode ocorrer uma situação de recursão infinita sem intenção. Por exemplo:
//Codigo da classe mãe
public class Mae{
public void teste(){
System.out.println("Metodo da classe mae");
}
}
//Classe Filha
public class Filha extends Mae{
public void teste(){
teste();
System.out.println("Metodo da classe Filha");
}
}
Vai resultar em um erro StackOverflowError
, que indica que a pilha de execução foi excedida. No entanto, ao modificar a classe Filha para:
//Classe Filha corrigida
public class Filha extends Mae{
public void teste(){
super.teste();
System.out.println("Metodo da classe Filha");
}
}
Teremos como saída do método teste()
da classe Filha:
Metodo da classe mae
Metodo da classe Filha
Portanto, o uso da palavra chave super
é de suma importância para indicar ao compilador que ele deve utilizar o método existente na classe estendida, e não na classe que estende. Podem haver casos onde não será estritamente necessário o uso da palavra chave super
, mas ainda assim nesses casos é indicado a utilização da mesma, para garantir que seu uso funcione como esperado e também para facilitar a leitura do código - ao bater o olho já fica claro que se trata de um método da classe mãe.
Para se aprofundar mais, recomendo a documentação da palavra-chave super da w3schools, que está em inglês mas caso seja necessário você pode utilizar a ferramenta de tradução do seu navegador para facilitar o entendimento!
Fico à disposição e bons estudos!
Oi Arthur! Tudo bem e contigo? Agora consegui entender. Muito obrigada pela explicação :)
É super fácil a didática do super, só usa quanto for acessar algum atributo de uma classe maior(CLASSE MÃE)