Boa noite!
Repare nesse código:
public class Conta {
private double saldo;
public double getSaldo(){
System.out.println("Metodo da superclasse");
return saldo;
}
}
public class ContaPoupanca extends Conta {
@Override
public double getSaldo() {
//this.getSaldo();
return super.getSaldo();
}
public void calcularJuros(){
this.getSaldo();
super.getSaldo();
}
}
public class Main {
public static void main(String[] args) {
ContaPoupanca conta = new ContaPoupanca();
conta.getSaldo();
conta.calcularJuros();
}
}
O resultado após rodar o método main vai ser:
- Metodo da superclasse
- Metodo da superclasse
- Metodo da superclasse
Isso acontece porque quando você chama o método getSaldo() com super dentro de um método @Override, ele vai chamar o método da superclasse.
Se você chamar getSaldo() com this em um método que não é sobrescrito, ele ainda sim vai chamar o método da superclasse.
Se você chama o getSaldo() com super dentro de um método que não é @Override ele ainda sim vai chamar o método da superclasse.
Repare que comentei uma linha do método getSaldo() da classe ContaPoupança, isso foi para evitar um ciclo infinito de chamadas até estourar uma exception, porque nesse caso, o método this.getSaldo() em um método @Override estaria chamando ele mesmo.
Respondendo a sua pergunta: Não, você pode chamar um método da superclasse usando super mesmo em um método que não é @Override.