Anda di halaman 1dari 3

www.tiexpert.

net – O ponto de encontro do estudante de TI


Interfaces
Interface é um recurso da orientação a objeto utilizado em Java que define ações que devem ser
obrigatoriamente executadas, mas que cada classe pode executar de forma diferente.
Interfaces contém valores constantes ou assinaturas de métodos que devem ser implementados dentro de
uma classe.
E por que isso?
Isso se deve ao fato que muitos objetos (classes) podem possuir a mesma ação (método), porém, podem
executá-la de maneira diferente.
Usando um exemplo bem drástico, podemos ter uma interface chamada aéreo que possui a assinatura do
método voar(). Ou seja, toda classe que implementar aéreo deve dizer como voar(). Portanto, se eu tenho
uma classe chamada pássaro e outra chamada avião, ambas implementando a interface aéreo, então,
nestas duas classes devemos codificar a forma como cada um irá voar().
Uma interface é criada da mesma forma que uma classe, mas utilizando a palavra-chave interface no lugar
de class.
interface nomeDaInterface { métodoAbstrato (argumentos); }
Usando uma Interface em uma Classe
Como vimos anteriormente, uma classe pode extender suas funcionalidades obtendo as características de
outra classe num processo que chamamos de herança. Uma interface não é herdada, mas sim,
implementada. Porque todo o código dos métodos da interface deve ser escrito dentro da classe que o
chama. Dessa forma, obtemos as assinaturas dos métodos da interface em uma classe usando a palavra-
chave implements.
A vantagem principal das interfaces é que não há limites de quantas interfaces uma classe pode
implementar. O que ajuda no caso de heranças múltiplas que não é possível ser feito em Java, pois uma
classe apenas pode herdar as características de uma outra classe.
Trazendo ao exemplo já usado por nós, teríamos o seguinte conceito.
1) Teríamos a classe principal que caracteriza a TV.
public class TV {
private int tamanho;
private int canal;
private int volume;
private boolean ligada;

public TV(int tamanho) {


this.tamanho = tamanho;
this.canal = 0;
this.volume = 0;
this.ligada = false;
}

// abaixo teríamos todos os métodos construtores get e set...


}

2) Teríamos as ações que comumente toda televisão executa, mas que cada modelo pode executar de
forma diferente. Como geralmente toda ação da TV é executada pelo controle remoto, então chamaremos
esta interface de controle remoto.

http://www.tiexpert.net/ver.php?page=160 Página 1
www.tiexpert.net – O ponto de encontro do estudante de TI
public interface ControleRemoto {
/*
* Perceba que apenas a assinatura dos métodos estão aqui.
* E cada método termina com um ponto-e-vírgula (;)
*/
void mudarCanal(int canal);
void aumentarVolume (int taxa);
void diminuirVolume (int taxa);
boolean ligar();
boolean desligar();
}

3) Agora que temos nossa interface e a definição do que é a TV, vamos desenvolver duas TVs diferentes,
imaginando que fossem duas marcas completamente distintas e que uma não tem nenhuma relação com a
outra.
Como ambas as TVs irão implementar a interface ControleRemoto, então, no corpo das duas classes devem
conter todos os métodos da interface. No exemplo usado abaixo, apenas implementaremos os métodos ligar
e desligar.
A TV modelo 001 é uma TV simples, sem muitos recursos que quando acionarmos o comando desligar irá
simplesmente desligar.
public class ModeloTV001 extends TV implements ControleRemoto {
public final String MODELO = "TV001";

public ModeloTV001(int tamanho) {


super(tamanho);
}

public void desligar() {


super.setLigada(false);
}

public void ligar() {


super.setLigada(true);
}

public void aumentarVolume(int taxa) { }


public void diminuirVolume(int taxa) { }
public void mudarCanal(int canal) { }
}

O modelo SDX é uma TV mais moderna, que quando acionarmos o comando desligar irá apresentar uma
mensagem dizendo "tchau!".
public class ModeloSDX extends TV implements ControleRemoto {
public final String MODELO = "TV-SDX";

public ModeloSDX(int tamanho) {


super(tamanho);
}

public void desligar() {


System.out.println("Tchau!");
super.setLigada(false);
}

public void ligar() {


super.setLigada(true);
}

http://www.tiexpert.net/ver.php?page=160 Página 2
www.tiexpert.net – O ponto de encontro do estudante de TI
public void aumentarVolume(int taxa) { }
public void diminuirVolume(int taxa) { }
public void mudarCanal(int canal) { }
}

Como pode ser visto, ambos possuem a mesma ação que é desligar, porém cada um executa de forma
diferente.
public class ExemploInterfaceamento {
public static void main(String[] args) {
ModeloTV001 tv1 = new ModeloTV001(21);
ModeloSDX tv2 = new ModeloSDX (42);

tv1.ligar();
tv2.ligar();

System.out.print("TV1 - modelo " + tv1.MODELO + " está ");


System.out.println(tv1.isLigada() ? "ligada" : "desligada");
System.out.print("TV2 - modelo " + tv2.MODELO + " está ");
System.out.println(tv1.isLigada() ? "ligada" : "desligada");

// ambas as TVs estão ligadas e vamos desligá-las


System.out.println("Desligando modelo " + tv1.MODELO);
tv1.desligar();
System.out.println("Desligando modelo " + tv2.MODELO);
tv2.desligar();
}
}

Se prestarmos atenção, apenas a TV2 mostrará uma mensagem quando for desligada.
Para visualizar melhor este exemplo, baixe o código exemplo e implemente os métodos que faltam.

Autor: Denys William Xavier


Este artigo está sob Licença Creative Commons
Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-nc-sa/2.5/br/
ou envie uma carta para Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.

http://www.tiexpert.net/ver.php?page=160 Página 3

Anda mungkin juga menyukai