[Resolvido] Método abstrato opcional

Oi, bom dia!

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

Ex:

[code]
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...");
	
}

}
[/code][code]
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?

}

}[/code]

Peço ajuda de vocês!

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.

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

[quote=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.
[/quote]

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

[quote=Enio Carvalho][quote=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.
[/quote]

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

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

[code]public class A {
public void metodo() {
System.out.println(“Pertenço a classe A”);
}
}

public class B extends A{
}

[/code]

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:

[code]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”);
}
}

[/code]

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.

Grande aula! Testei e funcionou. Valeu pela ajuda!