Escolar Documentos
Profissional Documentos
Cultura Documentos
// métodos abstratos //
/*
* não possuem corpo, da mesma forma que
* as assinaturas de método de uma interface
*/
public abstract void ligar();
public abstract void desligar();
// método construtor //
/*
* Classes Abstratas também podem ter métodos construtores,
* porém, não podem ser usados para instanciar um objeto diretamente
*/
public Eletrodomestico(boolean ligado, int voltagem) {
this.ligado = ligado;
this.voltagem = voltagem;
}
// métodos concretos
/*
* Uma classe abstrata pode possuir métodos não abstratos
*/
public void setVoltagem(int voltagem) {
this.voltagem = voltagem;
}
http://www.tiexpert.net/ver.php?page=172 Página 1
www.tiexpert.net – O ponto de encontro do estudante de TI
Como podemos observar, criamos um modelo de classe que compreende a uma gama enorme de outros
objetos.
Agora, qualquer objeto que derivar desse modelo deve ter sua voltagem especificada e dizer se está ligado
ou não.
Então, vamos criar outras duas classes que herdam as características da classe abstrata (modelo).
A primeira é a classe TV:
package classeAbstrata;
http://www.tiexpert.net/ver.php?page=172 Página 2
www.tiexpert.net – O ponto de encontro do estudante de TI
/* implementação dos métodos abstratos */
public void desligar() {
super.setLigado(false);
setSintonia(0);
setVolume(0);
}
Pronto, como podemos ver, temos duas classes totalmente diferentes que tem como base o mesmo modelo.
Também é perceptível o fato de que em ambas as classes, os métodos abstratos ligar() e desligar() foram
implementados, porém, não há a implementação dos outros métodos como setVoltagem() ou isLigado().
As classes abstratas servem de base para codificação de uma classe inteira, diferentemente das interfaces
que são apenas assinaturas dos métodos.
Sumarizando, quando temos que definir variáveis, constantes, regras, e pequenas ações definidas devemos
usar classes abstratas. Mas, se formos apenas criar a forma como objetos devem realizar determinadas
ações (métodos) devemos optar por interfaces.
A boa combinação de heranças e implementações de classes abstratas e interfaces proporciona uma forma
robusta de criação de softwares e uma ótima alternativa para heranças múltiplas comumente usadas em
C++.
Abaixo está uma classe que testa a funcionalidade dessas classes.
package classeAbstrata;
/*
* chamando os métodos abstratos implementados
* dentro de cada classe (TV e Radio)
*/
tv1.ligar();
radio1.ligar();
http://www.tiexpert.net/ver.php?page=172 Página 3