Quando utilizar interfaces coerentemente?

7 respostas
MrDataFlex

Pessoal, veja bem, eu ja sei que:

  • Interfaces servem para utilizar-se do conceito de multipla herança em Java, ok.
  • Interfaces, possuem características de ação, normalmente terminadas em: ‘avel’, ‘ivel’…

Ai penso, e lembro da sobescrita e sobrecarga… e penso: Realmente há necessidade de utilizar interfaces? Claro que deve haver, mas eu não consegui compreender sozinho ainda, alguém poderia me dar uma luz?

Obrigadão!
:slight_smile:

7 Respostas

MrDataFlex

estaria correto isso:

niveis {
é_Administrador
podeRemoverUsuarios
podeAdicionarUsuarios
podeVenderComDesconto
..
}
class usuario extends pessoa implements niveis {
login
senha
}

class pessoa {
nome
rg
idade
}
marciosantri

Vou te dar um exemplo tosco de uso de interface. Mas dá pra entender a idéia.

Vc tem um JTextField e um JCheckBox. Os dois tem funções e utilizações distintas, mas vc quer que ambos tenham um método chamado “getCampo” (o motivo não importa).

Vc pode criar um interface com este método e criar novos objetos JTextField e JCheckBox implementando esta interface. Digamos que o nome desta interface seja InterfaceCampo. Veja o código:

InterfaceCampo a = jtfNome; InterfaceCampo b = jcbAtivo; System.out.println(a.getCampo()); System.out.println(b.getCampo());

Logo, através de uma interface podemos criar um comportamento padrão para objetos de tipos diferentes. Daí o nome “múltipla herança”.

Fui claro ou te confundi ainda mais?

MrDataFlex

marciosantri:
Vou te dar um exemplo tosco de uso de interface. Mas dá pra entender a idéia.

Vc tem um JTextField e um JCheckBox. Os dois tem funções e utilizações distintas, mas vc quer que ambos tenham um método chamado “getCampo” (o motivo não importa).

Vc pode criar um interface com este método e criar novos objetos JTextField e JCheckBox implementando esta interface. Digamos que o nome desta interface seja InterfaceCampo. Veja o código:

InterfaceCampo a = jtfNome; InterfaceCampo b = jcbAtivo; System.out.println(a.getCampo()); System.out.println(b.getCampo());

Logo, através de uma interface podemos criar um comportamento padrão para objetos de tipos diferentes. Daí o nome “múltipla herança”.

Fui claro ou te confundi ainda mais?

pelo que eu entendi no seu exemplo, serve apenas para obrigar uma classe a conter aqueles métodos ? pq senão, neste caso, poderiam apenas ter métodos distintos de getCampo… privates msm, certo ?

T

O termo correto não é obrigar, e sim que o Objeto dakela classe vai adquirir aquele comportamento, de acordo com suas características.

marciosantri
MrDataFlex:
marciosantri:
Vou te dar um exemplo tosco de uso de interface. Mas dá pra entender a idéia.

Vc tem um JTextField e um JCheckBox. Os dois tem funções e utilizações distintas, mas vc quer que ambos tenham um método chamado "getCampo" (o motivo não importa).

Vc pode criar um interface com este método e criar novos objetos JTextField e JCheckBox implementando esta interface. Digamos que o nome desta interface seja InterfaceCampo. Veja o código:

InterfaceCampo a = jtfNome;
InterfaceCampo b = jcbAtivo;
System.out.println(a.getCampo());
System.out.println(b.getCampo());

Logo, através de uma interface podemos criar um comportamento padrão para objetos de tipos diferentes. Daí o nome "múltipla herança".

Fui claro ou te confundi ainda mais?

pelo que eu entendi no seu exemplo, serve apenas para obrigar uma classe a conter aqueles métodos ? pq senão, neste caso, poderiam apenas ter métodos distintos de getCampo.. privates msm, certo ?

Mas se vc criar métodos distintos não poderá ter uma variável de referência de um tipo só acessando vários tipos de objetos. No meu exemplo vc sabe quais são os objetos. Agora veja este:

{
...
InterfaceCampo a = jtfNome;
InterfaceCampo b = jcbAtivo;
imprimirCampo(a);
imprimirCampo(b);
...
}

public void imprimirCampo(InterfaceCampo x){
System.out.println(x.getCampo());
}

Temos um método para imprimir o nome do campo. Se vc simplesmente criasse métodos privados nas classe não teria como fazer isto de maneira simples. Mesmo se o seu método fosse público, vc teria que fazer vários ifs para testar o tipo de objeto e se houvesse um novo tipo de objeto que implementasse o método getCampo teria que sair varrendo o sistema para corrigir seus ifs. A interface simplifica este processo além de garantir que as classes que a implementam terão os métodos de sua definição. É meio que "herança", só que não é direta. É uma saída para um objeto "herdar" de mais de uma classe.

LPJava

qdo estudar threads vai ver que é mais pratico… implements Runnable que extends a class Thread… alem de ser mais eficiente.

ViniGodoy

Neste tópico a uma extensa explicação, com exemplos, do assunto:
http://www.guj.com.br/posts/list/51866.java#273117

E nesse tem outra explicação com exemplos de um uso de interface:
http://www.guj.com.br/posts/list/55387.java#290673

Criado 14 de junho de 2007
Ultima resposta 14 de jun. de 2007
Respostas 7
Participantes 5