Вы находитесь на странице: 1из 18

Interface

Prof. Hilton Cardoso Marins Junior


hilton.junior@ifsudestemg.edu.br

Objetivos
Utilizar interfaces para abstrair
comportamentos

Motivao
Considere que todos os funcionrios de uma empresa devam ser
autenticados para ter acesso a um sistema interno da empresa.
A presena do mtodo autentica na superclasse Funcionario
garante que esse comportamento seja estendido s subclasses.
Funcionario
...
public boolean autentica(int senha)

Diretor

Gerente
...

...

...

...

Motivao
O uso de herana resolve esse caso, mas vamos a uma outra
situao um pouco mais complexa: precisamos que todos os
clientes tambm possam ser autenticados.
Concorda com a soluo abaixo?
Funcionario
...
public boolean autentica(int senha)

Diretor

Gerente

Cliente

...

...

...

...

...

...

Motivao
A herana entre Funcionario e Cliente no faz sentido pois Cliente no um
Funcionrio. No faa herana quando a relao no estritamente um
Sabemos que Cliente no um Funcionrio, mas e se desejarmos que Cliente se
comporte como Funcionrio quanto ao aspecto de autenticao de senha?
Queremos abstrair o comportamento de autenticao. A soluo est no uso de
interface.
Funcionario
...
public boolean autentica(int senha)

Diretor

Gerente

Cliente

...

...

...

...

...

...

Herana x Interface
Usamos a herana para abstrair um
conceito.
Usamos interfaces para abstrair um
comportamento.

Interface
um tipo de contrato que define os mtodos que
uma classe precisa ter.
public interface Autenticavel {
public boolean autentica(int senha);
}

Uma interface pode definir uma srie de mtodos, mas


nunca conter implementao deles.
Ela s expe o que o objeto deve fazer, e no como ele
faz, nem o que ele tem.
Como ele faz vai ser definido em uma implementao
dessa interface

Como Implementar uma Interface?


public interface Autenticavel {
public boolean autentica(int senha);
}

Quem assinar o contrato acima, ou seja, quem implementar a


interface Autenticavel, se responsabiliza por implementar o mtodo
autentica.
public class Gerente extends Funcionario implements
Autenticavel{
...
public boolean autentica(int senha){
//aqui entra a implementao
}
}

Dizemos que Gerente implementa Autenticvel.

Como Implementar uma Interface?


public interface Autenticavel {
public boolean autentica(int senha);
}

Quem assinar o contrato acima, ou seja, quem implementar a


interface Autenticavel, se responsabiliza por implementar o
mtodo autentica.
public class Diretor extends Funcionario implements
Autenticavel{
...
public boolean autentica(int senha){
//aqui entra a implementao
}
} Dizemos que Diretor implementa Autenticvel.

Como Implementar uma Interface?


public interface Autenticavel {
public boolean autentica(int senha);
}

Quem assinar o contrato acima, ou seja, quem implementar a


interface Autenticavel, se responsabiliza por implementar o
mtodo autentica.
public class Cliente implements Autenticavel{
...
public boolean autentica(int senha){
//aqui entra a implementao
}
}

Dizemos que Cliente implementa Autenticvel.

A classe que implementa uma interface


obrigada a implementar os mtodos da
interface.
A exceo fica por conta de uma classe
abstrata. Uma classe abstrata que implementa
uma interface no obrigada a implementar
os mtodos da interface. Ela pode deixar a
implementao para suas subclasses
concretas.

Uma interface pode estender diversas interfaces.


public interface InterfaceA extends interfaceB, interfaceC,{
...
}
Java no permite herana mltipla entre
classes mas permite entre interfaces.

Uma classe pode implementar diversas interfaces.


Ela ser obrigada a implementar os mtodos de
todas as interfaces.
public class ClasseA implements interfaceA, interfaceB,{
...
}

Soluo com o uso de interface


Autenticavel
public boolean autentica(int senha)
Funcionario
...

Diretor

Gerente

Cliente

...

...

...

...

...

...

A Importncia da Interface
Uma varivel do tipo Autenticavel uma referncia para qualquer objeto
de uma classe que implementa Autenticavel
Gerente

Diretor

public class SistemaInterno {


Cliente
public void login(Autenticavel f) {
int senha = //pega senha de algum lugar
boolean ok = f.autentica(senha);
...
}
}

Agora podemos passar qualquer Autenticavel para o mtodo login do


SistemaInterno, desde que seja um objeto de uma classe que implementa
Autenticvel

Com o uso de interface tratamos a mesma forma


objetos de classes que no tratam do mesmo
conceito.

A Importncia da Interface
Gerente

Diretor

Fornecedor

public class SistemaInterno {


public void login(Autenticavel f) {
Cliente
int senha = //pega senha de algum lugar
boolean ok = f.autentica(senha);
...
}
}

Repare que pouco importa quem o objeto referenciado


realmente (olha a abstrao a!), pois ele tem um mtodo
autentica que o necessrio para nosso SistemaInterno
funcionar corretamente.
Alis, qualquer outra classe que futuramente implementar
essa interface poder ser passada como argumento.

public interface minhaInterface{


public void metodo1();
public int metodo2();
public double metodo3(double p);
}

Define os mtodos que


devero ser implementados.
TODOS OS SEUS MTODOS
SO ABSTRATOS

public class Classe1 implements minhaInterface{


public void metodo1(){......}
public int metodo2(){.....}
public double metodo3(double p){.....}
}

Implementa os
mtodos

public class Classe2 implements minhaInterface{


public void metodo1(){......}
public int metodo2(){.....}
public double metodo3(double p){.....}
}

Implementa os
mtodos

public class ClasseX{


public void metodoX(minhaInterface m){
//aqui eu invoco qualquer mtodo
//definido na interface}
}
}

Pode ser um
objeto da
Classe1 ou
da Classe2

Pode e No Pode
Uma interface pode ter
Mtodo abstrato
Atributo Final (constante)
Atributo Esttico
Uma Interface no pode ter
Todo o resto: atributo de instncia,
implementar mtodos, ...

Exemplificar melhor com o uso da interface


comparable