[Resolvido] Método abstrato opcional

5 respostas
Enio_Carvalho

Oi, bom dia!

Gostaria de saber se existe alguma solução em Java de implementação opcional de método abstrato.

Ex:

public abstract class  Teste1 {

	public abstract void executeAlgumaCoisa();

	public void iniciar()
	{
		System.out.println("Algumas rotinas executam...");
		System.out.println("Damos margem para a classe que herdar Teste1 execute alguma coisa neste momento...");
		executeAlgumaCoisa();
		System.out.println("Outras rotinas executam...");
		
	}
	
}
public class Teste2 extends Teste1{

	@Override
	public void executeAlgumaCoisa() {
// Se não quiser executar nada, tenho que colocar o método vazio.
		// Tem como deixar este código mais limpo?
		
	}

}

Peço ajuda de vocês!

5 Respostas

M

Você sempre deve implementar métodos abstratos. Se existe uma situação onde você não precisa implementar, esse método não deve ser abstrato ou deveria estar situado mais abaixo na hierarquia.

Felagund

vc pode retirar o abstract e deixar na classe pai o metodo vazio, as classes filhas que vão executar algo, sobrescrevem o metodo.

Enio_Carvalho

Felagund:
vc pode retirar o abstract e deixar na classe pai o metodo vazio, as classes filhas que vão executar algo, sobrescrevem o metodo.

Felagund, como a classe filha sobrescreve o método? Pode me dar um exemplo?

M
Enio Carvalho:
Felagund:
vc pode retirar o abstract e deixar na classe pai o metodo vazio, as classes filhas que vão executar algo, sobrescrevem o metodo.

Felagund, como a classe filha sobrescreve o método? Pode me dar um exemplo?

A sobrescrita ocorre quando o método tem a mesma assinatura. O compilador procura o método na classe atual. Se não encontra ele vai para uma classe acima. Se não encontrar novamente ele vai para a próxima e assim vai até achar o método ou até chegar em object e no caso acusar erro de compilação se não encontrar.

Se você colocar um método idêntico a um método da classe-pai na classe-filho ele achará primeiro o da classe filho, pois é o primeiro lugar que ele procura. Ex.:

public class A {
   public void metodo() {
      System.out.println("Pertenço a classe A");
   }
}


public class B extends A{
}

Se você executar o código abaixo:

B b = new B();
b.metodo();

ele lhe mostrará no console: Pertenço a classe A.

Por que isso acontece você já deve saber, mas vamos reforçar.

Ele procura o método em B. Existe metodo em B? Não, vai para a próxima classe da hierarquia, então.
Ele procura o método em A(próxima classe). Existe metodo em A? Sim, então executa.

Agora se mudarmos o código para:

public class A {
   public void metodo() {
      System.out.println("Pertenço a classe A");
   }
}


public class B extends A{
   public void metodo() {
      System.out.println("Pertenço a classe B");
   }
}

Ele vai encontrar metodo já na classe B, então ele não precisa subir mais na hierarquia para procurar, vai executar o método da classe B e imprimirá: Pertenço a classe B.

Só para lembrar, mais um exemplo:

A a = new B();
a.metodo()

executará "Pertenço a classe B" pois o que existe dentro da variável de tipo A é uma instância da classe B.

Enio_Carvalho

Grande aula! Testei e funcionou. Valeu pela ajuda!

Criado 13 de janeiro de 2010
Ultima resposta 13 de jan. de 2010
Respostas 5
Participantes 3