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.