Interfaces

Sou principiante em programaçao e tenho duvidas em relaçao as interfaces. Compreendo bem as noçoes de classes, superclasses, objectos etc ate porque ja fiz pequenos exercicios e trabalhos em Java mas nao tou a compreender a utilidade de usar interfaces pois nunca utilizei, sei que com uma interface o objecto fica mais formal em relaçao ao comportamento que vai mostrar atraves de metodos ao ‘mundo exterior’ e sei como implementar uma interface numa classe mas nao tou a perceber bem a sua utilidade.

agradeço qualquer tipo de ajuda :wink:

cumps

Na prática, existe uma grande motivação para utilização de interfaces: polimorfismo

Veja: http://pt.wikipedia.org/wiki/Polimorfismo
Veja também: http://pt.wikipedia.org/wiki/Inje%C3%A7%C3%A3o_de_depend%C3%AAncia

Se você entendeu bem os conceitos de herança e super-classe, a princípio, imagine a interface como uma classe abstrata pura.
Classe abstrata pura é aquela que jamais poderá ser instanciada E não possui implementação dos seus métodos, apenas a assinatura, ou seja todos os métodos são abstratos deixando para a classe filha implementa-los.
Exatamente como uma interface se comporta.

Porém interfaces são usadas também para limitar acesso, por exemplo, listeners. Quando vamos informar o listener especificamos somente aqueles métodos que a interface me obrigou a implementar, somente, nada mais, especifiquei o contrato e é isso que terei livre acesso, nada mais.

Bom dia a todos.

É exatamente o que o nosso amigo Tchello disse. Interfaces são como se fosse classes Abstratas puras, ou seja, todos os seus métodos tem que ser abstratos, e tem a finalidade de estabelecer um contrato, obrigando a implementar todos os seus métodos nas classes que implementa.

Porém eu disse que Interface é como se fosse classes abstratas, mas não são classes, toda classe em Java tem uma hierarquia de herança definida e todas as classes herdam da classe mãe “Object”. Já Interface não tem hierarquia de herança, ou melhor, não há herança definida em Interfaces e é por isso que voce pode implementar mais de uma Interface em uma classe. Já com as classes, voce não pode fazer herança múltipla.

Quanto as funcionalidades da Interface, isto já foi dito acima, por mim e pelo nosso amigo Tchello, porém é sempre recomendável utilizar a Interface para a sua finalidade principal de que é padronizar comportamentos, ou seja, criar os métodos padrões que não só servirá para uma classe específica, mas sim para várias classes. Digo isto, porque tem muita gente que cria Interface para criar procedimento padrão apenas para uma classe, não que isto não seja viável, porém não é recomendável, pois seria disperdício de recurso, ou seja, criar uma Interface para padronizar métodos em uma classe somente, é mais fácil criar os métodos direto na prórpia classe.

aah acho que ja compreendi, a interface funciona como se existisse uma herança, varias classes implementadas vao obter ‘informaçao’ da classe que contem a interface ‘mae’ mas nas classes que foram implementadas as interfaces temos que criar todos os metodos, enquanto que pela herança os metodos ja estavam feitos, era so fazer um extend da superclasse. As interfaces têm uma especie de ‘herança invisivel’, acho que é isto ne?

agradeço pelo tempo que dispensaram para responder :smiley: :smiley:

A ‘informaçao’ que referi é como de fosse num jornal, numa classe estao os titulos das noticias (como um indice) e nas classes implementadas vao ser criadas as noticias em si com toda a informaçao

Oi, para você não se confundir lembre-se de duas coisas.

  1. Uma classe (não abstrata) que implementa uma interface é obrigada a criar as funções definidas da interface.
  2. Uma interface A pode dar extends em várias outras interfaces (B, C, D, …). Nesse caso, a classe (não abstrata) que implementar a interface A terá que ter todos os métodos definidos em A, B, C, D,…

[code]public interface Grafo {

void inicializaGrafo();
boolean ehConexo();
boolean ehCompleto();
boolean ehArvore();
boolean temCiclo();

}[/code]

public class MatrizAdjacencia implements Grafo { // é obrigado a implementar os métodos da interface Grafo }

Como dito acima, uma interface pode dar extends em várias interfaces

[code]public interface Grafo extends Cloneable, Serializable{

void inicializaGrafo();
boolean ehConexo();
boolean ehCompleto();
boolean ehArvore();
boolean temCiclo();

}[/code]

ok?

vlw mutito obrigada :slight_smile: :slight_smile: