Duvida com metodos de superclasse

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 :slight_smile:

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,