[quote=bcartaxo]Kra antecipadamente vou te dizer q esse é um problema que praticamente todo programador inciante tem. Eu só faltava rachar minha cabeça e n entendia quando ou como usar interfaces. Gostaria também de dizer q esse problema só será resolvido com a pratica, ou seja, vc só vai ter uma compreensão total do assunto qd botar a mão na massa e enfrentar problemas reais. Mas acredito q posso deixar alguma contribuição, deixando claro q ainda sou um programar iniciante e q posso cometer algum erro, e q caso aconteça apontem se alguma colocação for errada. Ai vai a minha explicação:
Interface é um conceito anterior ao java, que é inerente programação orientada a objetos, porém da forma como eh usada em java (com palavra resevada e td mais), se n me engano foi inaugurada com o java mesmo (ai n tenhno certeza).
Mas qual o conceito de interface de OO?
Interface é um meio que a OO criou para se ter acesso a componentes, subsistemas ou classes, já que o paradigma prega o encapsulamento e a ocultação de dados. Pode-se fazer a seguinte comparação com o mundo real: Um controle remoto de tv. Ele é um mecanismo eletrônico q tem seus circuitos e funciona baseado em conceitos q um leigo n tem como entender e utilizar (e poderia danificar caso resolvesse mexer), por essa razão o controle tem uma capa que cobre todo o sistema eletrônico (analogamente essa capa seria o encapsulamento de dados, essa capa q esconderia o funcionamento do controle), nessa capa existem botões q são de fácil entendimento para todos, são botões que te oferecem uma funcionalidade, ao apertar o botão de ON, vc sabe q o dispositivo vai ligar, mas n sabe como o controle fez pra operacionalizar tal ação, isso seria o encapsulamento. Mas note q vc utilizou uma “interface” para usar o controle remoto, e q interface seria essa? Os botões. Através da interface vc teve acesso a funcionalidades q estão perfeitamente encapsuladas, sem essa interface n seria possível ter acesso as funcionalidades de um determinado dispositivo. Porém note qualquer dispositivo q seja disponibiliza uma interface bem definida. A interface oferecida por um controle remoto seria o conjunto de todos os seus botões, se um controle tem um botão de FF (fast-forward “adiantar”) esse controle garante q vc pode adiantar, um dvd por exemplo, mas se vc desejar voltar (REW) e esse controle n tiver o dito botão, n será possível utilizar essa funcionalidade, já q a interface do dispositivo n oferece tal funcionalidade, assim sendo, a interface é algo restritivo, logo bem definido.
Trazendo agora termos de classes, oq seria a dita interface?
Objetivamente falando seriam as assinaturas dos métodos de uma classe. Pq as assinaturas dos métodos? Pq os métodos em OO são os dispositivos q executam um determinada funcionalidade(analogamente os botões do controle remoto oferecem uma funcionalidade), logo o conjunto de todas as assinaturas de métodos de uma classe seria a interface dessa classe, note q esse conceito de interface está desligado da palavra chave interface em java, afinal toda classe oferece uma interface para q possa ser usada, independente de vc implementar uma interface (do java) ou n.
Então o conceito de OO para interface seria resumidamente esse: O conjunto de funcionalidades q um dispositivo oferece ao mundo exterior (seja ela uma classe componente ou subsistema).
E oq é interface em java?
Antes de mais nada, claro q n é uma idéia dissociada da idéia de interface de OO, como vc vai notar a seguir.
Interface em java é um conjunto de declarações de métodos (funcionalidades), sem implementação. Mas pra que alguém declararia métodos sem implementação?
Vamos supor q vc queira criar um conceito de objetos q podem ser abertos, ou seja, objetos “abríveis” (sei a palavra não existe, mas entenda a idéia =P ). Daí vc criaria um interfafe “Abrível” q, por exemplo, declararia dois métodos, abrir() e fechar(). Toda classe q implementasse essa interface (implements) teria q declarar e implementar esses dois métodos. E q classes seriam essas? Inúmeras. Vc poderia ter uma classe janela ou uma classe arquivo, ou porta, ou oq quer q seja q possa ser aberto. Daí todas as classes q implementassem a interface ?Abrível? teriam o compromisso de oferecer as funcionalidades de abrir e fechar, mesmo q cada um abra e feche de forma diferente.
Preste bem atenção na frase anterior, na colocação ?de forma diferente?. Isso n seria polimorfismo??? Exato, a interface em java é um meio de viabilizar o polimorfismo. Por exemplo: Se vc tivesse varias classes de tipos diferentes, mas q implementassem a interface ?Abrível?, todas essas classes seriam do tipo ?Abrível?, assim sendo vc pode ter um array do tipo ?Abrível? q armazenaria classes do tipo janela, porta, arquivo, gaveta, ou oq quer q seja q implemente a interface ?Abrível?, notou o polimorfismo???
E oq o polimorfismo traz de bom? Flexibilidade. Imagine q vc define a dita interface ?Abrível? e depois q todo o código do sistema esteja pronto vc queira criar uma nova entidade, loja por exemplo, uma loja apresenta a característica abrível, afinal ela abre e fecha numa determinada hora, então ela poderia perfeitamente implementar a interface ?Abrível?. Então se vc criou a interface ?Abrível?, e num método de uma classe vc passa como parâmetro um objeto do tipo da interface ?Abrível?, vc pode usar o polimorfismo e passar uma loja no lugar de uma janela, mesmo q no momento q vc criou o sistema n existisse a entidade loja, note q como loja implemeta a interface ?Arível?ela pode ser utilizada em qualquer local q um outro objeto ?Abrível?. Notou a flexibilidade e a facilidade na hora de atualização de um sistema?
A interface tb é uma idéia do java para solucionar a questão da herança múltipla. Como vc deve saber java n suporta herança múltipla, mas existem casos q se faz necessário caracterizar uma classe como sendo de mais de um tipo, então a solução foi criar a idéia de interface do java, onde vc pode herdar de uma classe e implementar uma ou mais (qts vc bem entender) interfaces, podendo assim caracterizar uma classe como sendo de inúmeros tipos (o tal polimorfismo).
Resumindo: Eu diria interface em java é um dispositivo q fornece flexibilidade, viabiliza o polimorfismo e permite herança múltipla ?DE TIPO?.
Demorei umas meia hora pra escrever tudo isso, não sei se fui claro e se cometi algum erro de conceito, mas isso é oq tenho a passar pra vc ou qualquer outro q tenha duvida nesse tema. Me solidarizei bastante com sua duvida pq quebrei muito minha cabeça pra conseguir entender a idéia de interface. Espero ter sido útil.
[/quote]
To aprendendo isso na faculdade agora e é complicado pra caramba. Mas gostei muito da seu post, obrigado.