Bom, sou um mero iniciante na linguagem Java e estou tendo problemas com a keyword “super”.
Bom, aqui temos uma simples classe Pai:
public class Pai {
String nomePai;
public Pai(String nomePai) {
this.nomePai = nomePai;
}
public String getNome() {
return this.nomePai;
}
}
E em seguida temos a filha:
public class Filha extends Pai {
private String nomeFilha;
public Filha(String nomeFilha, String nomePai) {
super(nomePai);
this.nomeFilha = nomeFilha;
}
public String getNome() {
return super.getNome();
}
}
No main temos:
public class Main4 {
public static void main(String[] args) {
Pai pai = new Pai("José");
Filha filha = new Filha("Maria", "Amadeu");
System.out.println(filha.getNome());
}
}
Como resultado, quando a filha imprime o nome é “Amadeu”…, se eu imprimo com “this” dá o mesmo resultado. Alguém pode me explicar a diferença por favor? Me perdoem a ignorância.
Comando super executa na classe pai da classe filha.
No seu método getNome() da classe filha voce esta chamando o getNome() da classe Pai. Logo quando voce chamar filha.getNome(), ele vai na classe pai e pega o nome da classe pai.
De uma olhada neste capítulo da apostila
Apostila Caelum
E meu camarada, você sabe me dizer por quê isso me estoura um erro gigante na tela?
`public class Main4 {
public static void main(String[] args) {
Pai pai = new Filha("José", "Romilda");
System.out.println(pai.getNome());
}
}
public class Filha extends Pai {
private String nomeFilha;
public Filha(String nomeFilha, String nomePai) {
super(nomePai);
this.nomeFilha = nomeFilha;
}
public String getNome() {
return "oi" + this.getNome();
}
}`
package br.com.treino.model;
public class Pai {
String nomePai;
public Pai(String nomePai) {
this.nomePai = nomePai;
}
public String getNome() {
return this.nomePai;
}
}
Isso se deve pelo fato de que eu falei que a minha “filha” é um Pai?
Normal, quando voce chama o construtor do pai vc esta setando o nome do pai
Isso dá erro pois entra em loop, pois você chama o método getNome() dentro dele mesmo (recursividade infinita). Vai ficar num loop infinito e lançar a exceção java.lang.StackOverflowError.
1 curtida
Obrigado meu parceiro, acabei de perceber esse infortúnio. O super.getNome() está pegando do método do pai (só o esqueleto do método) e jamais poderia chamar o this., entendi, valeu mesmo.