Relembrando o exercício dos animais:
Ao implementar essa hierarquia, percebemos que o código da classe animal é muito genérico:
public class Animal
{
private String nome;
public Animal(String n) {
nome = n;
}
public void imp() {
System.out.println("Nome: "+nome);
}
public String getName() { return(nome); }
public void talk() {
System.out.println("Eu nao falo");
}
}
|
Na prática, nunca iremos instanciar um animal, pois ele serve apenas para a criação de pássaros e mamíferos. Seguindo a mesma lógica, essas duas classes também não serão instanciadas. Ou seja, somente as classes derivadas de Passaro (BemTeVi, Papagaio) e Mamifero (Cachorro, Vaca) é que serão usadas efetivamente.
Para esse tipo de situação, Java suporta a criação de uma classe abstrata. Esse tipo de classe não pode ser instanciado, e serve apenas para derivarmos novas classes. Veja como a classe animal pode ser implementada dessa forma:
public abstract class Animal
{
private String nome;
public Animal(String n) {
nome = n;
}
public void imp() {
System.out.println("Nome: "+nome);
}
public String getName() { return(nome); }
public abstract void talk();
}
|
Observe que o método talk() também foi declarado como abstract: isso significa que esse método não foi implementado nesta classe e deverá, obrigatoriamente, ser implementado nas classes derivadas. Consequentemente, as classes Passaro e Mamifero também serão classes abstratas:
public abstract class Passaro extends Animal
{
public Passaro(String n) {
super(n);
}
public void talk() {
System.out.println("Piu piu");
}
}
|
Repare que o método talk() em Mamifero é abstract, pois não tem implementação. Já em Passaro, tem.
public abstract class Mamifero extends Animal
{
public Mamifero(String n) {
super(n);
}
public abstract void talk();
}
|
Além de fornecer uma modelagem mais robusta ao programador, as classes abstratas também são representadas de forma mais eficiente, pois nunca precisarão ser instanciadas.
|
Exercícios :
|
|
Lembrando que é fundamental encerrar a aula de hoje...
|