Duvidas Sobres Interface!

Ai pessoal eu estou com muita duvida sobre Interface

Lá vai…

Tipo pessoal eu não to sabendo quando Usar… eu naun to sabendo enteder no que ela irá me ajudar… quando usar implements e/ou extends, e ainda estou com duvida de saber quando criar uma interface ao invez de uma classe e vice - versa… se voces tiverem DOCUMENTOS SOBRE INTERFACE PASSEM O LINKS PARA MIM EU AGRADEÇO…

BOM PESSOAL GOSTARIA DE APRENDER MESMO POR FAVOR ME AJUDEM []'s :?:

Prezado Raff…

Interface nos implementamos, usar implements.
Classe nos extendemos, usar extends.

Segue um link conforme solicitado, so que em ingles, não tem problema, se não souber traduz ele no www.altavista.com… e da Sun, muito bom, voce pode seguir bastante coisa clicando em « Previous ? Trail ? Next »
no topo da pagina, espero ter ajudado um pouco…

Interface http://java.sun.com/docs/books/tutorial/java/concepts/interface.html

Classe
http://java.sun.com/docs/books/tutorial/java/concepts/class.html

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=Raff]Ai pessoal eu estou com muita duvida sobre Interface

Lá vai…

Tipo pessoal eu não to sabendo quando Usar… eu naun to sabendo enteder no que ela irá me ajudar… quando usar implements e/ou extends, e ainda estou com duvida de saber quando criar uma interface ao invez de uma classe e vice - versa… se voces tiverem DOCUMENTOS SOBRE INTERFACE PASSEM O LINKS PARA MIM EU AGRADEÇO…

BOM PESSOAL GOSTARIA DE APRENDER MESMO POR FAVOR ME AJUDEM []'s :?:[/quote]
http://www.guj.com.br/java.tutorial.artigo.123.1.guj

É isso ai Acolon!!!
Java NÃO possui herança multipla. Implementar uma interface quer dizer que a(s) classe(s) em questão terão obrigação de implemetar os métodos assinados na interface. Não há nenhum aproveitamento de código nesta situação. Interfaces auxiliam muito o polimorfismo, mas a única coisa que, na minha opnião, se aproxima de herança multipla e quando as classes que implementam determinadas interfaces herdam as variáveis static final das interfaces, ai sim teve uma “herança multipla de constantes”. Eu também concordo com você quando citou: " herança de tipos".

Complementando e parabelizando nosso amigo Acolon…

Eu trato Interfaces como sendo uma “espécie de contrato” entre as classes justamente para permitir a flexibilidade e o desacoplamento, onde as classes que as implementam assinam esse contrato e se responsabilizam em implementar e reescrever os métodos criados na interface, a interface cria as ordens (assinaturas dos métodos) e as classes se obrigam a fazer o que é pedido, vou tentar através de alguns exemplos ilustrar o que foi dito pra você.

[code]

public interface Autenticavel
{
public boolean autenticaLogin(String login);
public String getLogin();
public void setLogin(String login);

}[/code]

Essa interface pode ser utilizada para por exemplo, você tem classes em um sistema como Funcionario(abstrata), Gerente extends Funcionario, Diretor extends Funcionario, Engenheiro extends Funcionario, Contador extends Funcionario, Balconista extends Funcionario, Secretaria extends Funcionario e nem todos elas por exemplo acessam o sistema (tem um login) somente Diretor, Gerente e Contador, Engenheiro, Secretaria, Balconista, não acessam o sistema, não tem login… então como por exemplo fazer quem tem login se comunicar, ser “Autenticavel” no sistema da empresa, tirar relatórios somente de quem tem login, etc…

criar a Interface Autenticavel com as assinaturas “os contratos” a serem firmados definidos e quem quiser assinar esse “contrato” implementa-la e comprometer-se, ter a responsabilidade de reescrever os métodos declarados nela.

Gerente extends Funcionario implements Autenticavel
//todos os metodos especificos de Gerente e mais os metodos reescritos da Interface

Diretor extends Funcionario implements Autenticavel
//todos os metodos especificos de Diretor e mais os metodos reescritos da Interface

podendo assim, assumindo, aceitando a serem tratados como Autenticaveis, dai o polimorfismo e flexibilidade.


public class RelatorioFuncionariosAutenticaveis 
{
	private String login = null; 
	
	public void relatorioFuncionariosAutenticaveis[color=red]([b]Autenticavel[/b][/color] a)	
	{
		System.out.println(a.autenticaLogin(login));
	}
}

Viu que Autenticavel se tornou uma referencia para receber todos os funcionarios que tem login, que implementaram essa interfafe?

Desculpe-me por escrever muito, a intenção foi de ajudar…

Rodrigo

Exatamente isso Rodrigo, flexibilidade ou seja, polimorfismo.
Agora eu volto a destacar: Onde está a herança multipla?
Só se for herança de tipos (auxiliando assim o polimorfismo) e herança de variáveis static final, para as subclasses da(s) interface(s). Se alguém discordar estou aberto a questionamentos!!!
T+

bom nao se assuste, tb fiquei… bom mais depois de um exemplo que vi da kathy vi a essencia se ligue…
Vamos dizer que vc tem as seguintes classes:

class Game{}
class MortalKombat extends Game{}
class Mario externds Game{}

temos ai uma herança blz? mais vamos dizer que dos dois jogos apenas 1 deles vai rodar vai rodar filme… ai vc pode criar uma interface Filme e apenas essa classe rodar o filme seria o ideal e teria resolvido o problema… mais vc pode me perguntar a camilo eu criava um metodo filme na superclass e fazia isso na mesma class… mais a diferença é que todas as classes ia herdar esse metodo as vezes sem necessida por exemplo se o filme era para rodar em Mario… ai MortalKombat tb ia ter o filme… se esse metodo for abstract é obrigado a class concreta implementar… e a manutenção seria mais dificil… agora com interface nao…
veja:

interface Filme{
public  void setFilme();
}

pronto qualquer jogo que for ter um filme para rodar so implementar essa interface olha o codigo agora:

class Game{}
class MortalKombat extends Game{}
class Mario extends Game implements Filme{
public void setFilme(){}
}

pronto seu filme taria rodando na class Mario…
esse eh um exemplo basico da interface… entenda a essencia… dele o capitulo 2 da kathy fala de uma forma legal… e tb para vc usar a interface…decore as regras dela… que é importante…
[b]

  • uma interface nao implementa ouitra interface mais extends a ela
  • uma class pode implementar varias interface
  • uma class abstrata nao tem obrigacao de implementar os metodos de uma interface… ao contrario de uma class concreta(nao-abstrata)
  • em java uma class so extends a uma unica class… nao a varias
  • uma class nao extends a interface pois elas sao implementadas
    [/b]
    bom essas sao algumas regras que lembro de interface…
    espero ter ajudado… se eu tiver errado alguem do forum ai me corrige, estou estudando ainda…

Eu to com um problema meio parecido

tenho isso

public class FormPrincipal extends JFrame

entao ele está herdando métodos do JFrame, certo?

eu gostaria de usar métodos de uma classe Utils que uso sem precisar ficar invocando ela toda hora, isso eu resolveria usando multiplas heranças, mas java não tem isso ;x

Entao li que podia usar multiplas interfaces.

dae na interface fiz assim:

[code]
public interface UtilsInterface {

public void mensagemConfirmacao();

}[/code]

mas onde diabos eu vou alocar o código dentro do método mensagemConfirmacao ? No FormPrincipal? Mas dae nao teria necessidade de ter essa interface? O.o
Eu quero usar essa Utils em vários Jforms que vou fazer, por isso o nome dela é utils.

Alguma luz?

(Y)

cara vc vai ter que implementar em todas as classe que vc queira que ela funcione.

se foi isso que eu intendi neh

desculpe errei, mais seguinte interface, não eh um metodo, o java intende como se fosse uma “classe” vc vai criar uma interface no seu projeto, se vc quiser e depois vai implementar nas suas classes que vc queira usar

pode me mostrar um exemplo de uma interface implementanda com uma classe que herde um JFRAME?

public class FormPrincipal extends JFrame implements Utilsinterface

na verdade uma interface nao herda classes soh herda intefaces.

mais por exemplo

[code]class CriaTela extends JFrame, implements ActionListner {

// aqui vc coloca o seus atributos e metodos

}[/code]

tah vendo ai cara eu criei uma classe CriaTela que extende um JFrame e implementa um ActionListner.

[color=red]ActionListner[/color] é uma interface já criada do java, ele tem um metodo [color=red]EventListener[/color] isso quer dizer que vc tem que implementar esse metodo dentro da sua classe.

viu como eh o uso de interface

nesse caso a interface jah existe mais vc opde criar as suas proprias interfaces

[code]interface Funcionario (){

//coloca seus metodos

}[/code]

ai vc poderia usar

[color=red]Funcionario f = new Gerente();[/color]

eu posso chamar um gerente de funcionario. EH LOGICO QUE SIM

esperto ter ajudado

Prezado savior…

[list]
dae na interface fiz assim:
Code:

public interface UtilsInterface {

public void mensagemConfirmacao();

}

mas onde diabos eu vou alocar o código dentro do método mensagemConfirmacao ? No FormPrincipal? Mas dae nao teria necessidade de ter essa interface? O.o
Eu quero usar essa Utils em vários Jforms que vou fazer, por isso o nome dela é utils.
[/list]

na interface, leia o tópico descritos aqui, você fecha um “contrato” e dá as regras, você diz mais ou menos assim, esse é o contrato quem quiser utiliza-lo vai ter que cumrir, exemplo vai ter que implementar a interface na classe, class x implements interface y, e reescrever o método, cumprir o “contrato”, na interface vocé só delcara a assinatura do método e no lugar das chaves", {} vocé coloca o ponto e vírgula";".

Na interface você só dá as regras, com valor de retorno ou não, argumentos ou não e na classe você faz cumprir as ordens, reescreve o método de acordo com a assinatura da inteface.

Rodrigo

Eu to entendo a explicação

É que eu queria fazer uma interface genérica para usar em todos os Jforms, assim pouparia meu tempo escrevendo vários métodos de confirmação saca?

No projeto final da faculdade, a gente usava interfaces no php5, mas cada interface era especifica para um módulo, euqueria uma interface genérica.

Acho que do jeito que não to conseguindo absorver, vou apela pra invocar a classe no código mesmo >.<

Metodos abtratos rolam?

Classe::metodo? //Exemplo no php5

Savior,

Seguinte kra… n sei como eh tua classe Utils, mas de antemão vou te dizer q herança n deeve ser usada simplesmente pq se quer parar de ficar invocando metodos de outras classes. Existe toda uma semântica. Qd vc herda de uma classe significa q essa subclasse eh semanticamente uma classe do tipo da super classe. Como disse n sei ao certo como eh teu caso, só gostaria de lembrar isso, para q n cometas uma mostruosidade. =P

bom isso eh normal qdo esta vendo o assunto pela primeira vez… vou tentar explica em poucas linhas para vc entender:

a class eh seu programa.
interface nao eh uma class pq ela nao faz parte da hierarquia de class, ou seja ela nao extends a Object. as Interface sao implementadas.

Quando uso uma interface ou uma class?
bom vamos la… a sua duvida que acredito eh usar o extends e implements ne?
o extends eh quando vc tem sua class e quer que ela herde caracteristas de outra class um exemplo:

class Game{
public void telaInicial(){System.out.println("Seja bem vindo ao mundo dos Games");}
.... aqui vem mais outros metodos dessa class

mais vc pensou em criar um game

class MortalKombat extends Game{
public void setLutador(){}
}

vamos entender: vc tem ai duas classes passando no teste É-UM ou seja, MortalKombat É-UMA subclass de Game… ele faz tudo que Game fazer, eh herdado tudo aquilo que estiver disponivel nessa class, implicitamente MortalKombat tem o metodo telaInicial(), mais pq? se eu falei acima que ela faz tudo que Game faz entao ela recebe esse metodo. Um exemplo melhor: “VC extends do seu pai” Tudo que seu pai tem eh tb seu, aquilo que ele declarar como publico, nao vai ser seu o sabonete dele, a cueca… entende? oque seu pai deixar no testamento sendo seu sera seu, entao minha class Game faz isso declarei meu metodo public deixando disponivel para o mundo.
E pq usar isso? isso facilita a manutenção, e reutilização de codigo se vc quiser criar outro Game nao precisa criar todo o programa novamente, eh so extends a Game, e na class do novo game vc implementa os metodos desse game veja:

class SuperMario extends Game{
public void setFase(){}
}

Entendeu o uso de extends - extensão? se nao leia mais uma vez… isso eh importante vc vai viver com isso programando em java, deve ser seu cafe da manha, almoço, lanche…
agora vamos ao implements pegando o exemplo acima:

interface animacao{
public void anima();}

as interface sao implicitamente publicas, elas nao podem implementar nenhuma outra interface mais pode extends, jamais pode implementar uma classes mais podem ser implementadas pela mesma. Vamos la:
Voce cria uma interface para algo especial, por exemplo dos dois jogos criados acima MortalKombat e SuperMario vamos dizer que apenas o mario vai possui animação iaia? ah poderia criar um metodo apena em mario resolveria meu problema, pode ser que sim, mais nao seria a melhor forma… ta ai o uso de interface veja

class SuperMario extends Game implements animacao{
public void setFase(){}
public void animal(){}

Apenas SuperMario sera animado, mortalkombat nao…acho que isso ai… pesquise mais sobre, mais tome cuidado, com bibliografias eu ja vi algumas explicando esses assuntos de forma grosseira que o cara toma pavor ao assunto sendo que nao eh bem assim eh algo bem simples qdo bem explicado…
qualquer duvida tamos ai… espero ter ajudado :smiley:

1 curtida

Aaaa

entendi mais ou menos sobre herança

Meu chefe me deu lá no trampo um livro do o’reilly, agora eu aprendo >:D

Eu tava pensando que com interfaces eu iria resolver meu probleme de ter que invocar a classe toda hora que queria usar um método, porque praticamente todos os jForms vão usar essas funçóes mais “genéricas”, então pensei que poderia usar uma interface … mas acho melhor ficar invocando ela toda hora (new Utils();).

Vou dar uma estudada, desenvolvi umas aplicações java, mas nunca cai nesse patamar de heranças e interfaces

[]'s

[quote=LPJava]bom nao se assuste, tb fiquei… bom mais depois de um exemplo que vi da kathy vi a essencia se ligue…
Vamos dizer que vc tem as seguintes classes:

class Game{}
class MortalKombat extends Game{}
class Mario externds Game{}

temos ai uma herança blz? mais vamos dizer que dos dois jogos apenas 1 deles vai rodar vai rodar filme… ai vc pode criar uma interface Filme e apenas essa classe rodar o filme seria o ideal e teria resolvido o problema… mais vc pode me perguntar a camilo eu criava um metodo filme na superclass e fazia isso na mesma class… mais a diferença é que todas as classes ia herdar esse metodo as vezes sem necessida por exemplo se o filme era para rodar em Mario… ai MortalKombat tb ia ter o filme… se esse metodo for abstract é obrigado a class concreta implementar… e a manutenção seria mais dificil… agora com interface nao…
veja:

interface Filme{
public  void setFilme();
}

pronto qualquer jogo que for ter um filme para rodar so implementar essa interface olha o codigo agora:

class Game{}
class MortalKombat extends Game{}
class Mario extends Game implements Filme{
public void setFilme(){}
}

pronto seu filme taria rodando na class Mario…
esse eh um exemplo basico da interface… entenda a essencia… dele o capitulo 2 da kathy fala de uma forma legal… e tb para vc usar a interface…decore as regras dela… que é importante…
[b]

  • uma interface nao implementa ouitra interface mais extends a ela
  • uma class pode implementar varias interface
  • uma class abstrata nao tem obrigacao de implementar os metodos de uma interface… ao contrario de uma class concreta(nao-abstrata)
  • em java uma class so extends a uma unica class… nao a varias
  • uma class nao extends a interface pois elas sao implementadas
    [/b]
    bom essas sao algumas regras que lembro de interface…
    espero ter ajudado… se eu tiver errado alguem do forum ai me corrige, estou estudando ainda…[/quote]

Eu estou com uma dúvida no seguinte:

Neste caso eu poderia ter criado o setfilme() dentro da propria classe mário? acho que seria a mesma coisa, ou n?

Escrevi um artigo sobre interfaces!
http://labs.sadjow.com/2008/08/23/java-o-que-e-interface/

Valeu! :smiley: