Problemas com "super"

5 respostas
java
J

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.

5 Respostas

R

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

J

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?

R

Normal, quando voce chama o construtor do pai vc esta setando o nome do pai

L

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.

J

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.

Criado 26 de janeiro de 2016
Ultima resposta 28 de jan. de 2016
Respostas 5
Participantes 4