quando eu invoco um metodo de uma superclass é obrigatorio eu usar o super.metodoDeSuperClasse() ou posso simplesmente fazer o seguinte metodoDeSuperClasse() ?
QUANDO VOCÊ TEM UMA CLASSE MÃE VOCÊ DEVE COLOCAR ‘SUPER’ NA CLASSE FILHA QUE QUER DIZER PARA A CLASSE FILHA QUE ELA IRA USAR O METODO DA CLASSE MAE, A NÃO SER QUANDO VOCÊ VAI SUBSCREVER O MÉTODO AI NÃO PRECISA.
Para invocar um método da classe mãe não é preciso usar o super, desde que este método não esteja sobreescrito na classe atual.
Não precisa, já que você “ganhou” o método pela realização da Herança.
Abraço…
Você tem 2 situações:
a) Se o método que você está escrevendo é nome, ou é a sobrescrita de outro método, que não o que vc quer chamar da classe mãe, não precisa usar o super:
b) Se o método que você está escrevendo está sobrescrevendo o da classe mãe, aí precisa, caso contrário, você terá uma recursão infinita.
Exemplo:
[code]public class Pai
{
public void fazA() {
System.out.println(“A”);
}
public void fazB() {
System.out.println("B");
}
public void fazC() {
System.out.println("B");
}
}
public class Filha {
public void fazA() {
//Ok, estamos sobrescrevendo, mas chamando outro método
fazB();
}
public void fazD() {
//Método novo, ok também.
fazA();
}
public void fazB() {
//Queremos chamar fazB() do pai, precisa do super
super.fazB();
//Note que fazer só fazB() chamaria esse mesmo método novamente.
//Recursão infinita!
}
}
[/code]
deixa eu ver se eu entendi o exemplo do vinicios. Entao eu só uso o super se eu criar um novo método na classe filha com o mesmo nome da classe mãe, e dentro do método da classe filha eu precizar chamar o método da classe mãe do mesmo nome?
É, por aí.
Se vc sobrescreveu na filha, e não quer chamar o comportamento sobrescrito, mas sim o do pai, use o super.
Então o super seria só pra recursão ser “FINITA” ?
No super não há recursão pq, no fundo, você está chamando método diferentes.
Ixi to bastante confuso arrespeito desse assunto :S
É como delegar uma chamada de método. Você quer chamar aquele método, mas o comportamento que vai ter ali é o mesmo da classe pai. Então se você instanciar a subclasse e quiser chamar aquele método que a superclasse tem, você usa o super dentro do método da subclasse.
public class SuperClasse {
public void esseMetodo() { }
}
public class SubClasseUm extends SuperClasse {
public void outroMetodo() { super.esseMetodo(); }
}
Esse super aí é como se você instanciasse uma SuperClasse e chamasse o método usando aquela variável.
(Acho que mais confundi do que esclareci :x)
Pelo contrario… Se for só isso eu entendi perfeitamente.
Boa prática:
[list]Se vai chamar da superclasse, use o super;[/list]
[list]Se vai chamar da própria classe, use o this.[/list]
SEMPRE
Valew Francisco pela dica, mais o this eu só uso para o atributo não? ou em metodo tb?
Sim Leandro, o this é tanto para métodos quanto para atributos. Não é obrigatório usar o this, apenas estou dizendo que é uma boa prática.
Abraços,