Uma classe *implementa* servicos.
Uma interface *especifica* servicos.
Ambos mecanismos suportam o polimorfismo (atraves da heranca de
implementacao e da implementacao de interface, respectivamente). Por
exemplo:
// a classe X
class X { ... }
// o protocolo de servicos K
interface K {...}
// Y e' uma especie de X, e e' capaz de prestar
// os servicos especificados em K
class Y extends X implements K { ... }
Um objeto da classe Y pode ser usado em qualquer lugar em que se
espere um objeto da classe X ou um objeto de uma classe que implemente
a interface K.
O mecanismo de heranca possibilita que uma classe herde os
atributos e metodos de sua ancestral, e esse e' o seu objetivo
principal: a reusabilidade. O polimorfismo tambem e' conseguido, mas
nao deve ser o unico interesse aqui.
O mecanismo de implementacao de interfaces e' mais adequado que a
heranca quando queremos apenas o polimorfismo (nao se quer reutilizar
atributos nem implementacoes de metodos). A linguagem C++ fornece esta
capacidade com as classes abstratas puras. Java fornece um conceito
similar com um nome especifico: interfaces.
Por exemplo, pense no caso da interface java.lang.Comparable. Um
objeto e' comparavel se ele implementa Comparable (que possui um unico
metodo: "int compareTo(Object)"). A sua classe real nao interessa
aqui. Porque usariamos heranca de implementacao, se a unica coisa que
queremos e' poder aplicar um metodo especifico (a comparacao)?
Essa separacao entre especificacao e implementacao e' de suma
importancia. Quem conhece tecnologias de objetos distribuidos e
componentes deve concordar. Sem falar que o grande sucesso da Sun em
estabelecer especificacoes padronizadas (nao implementacoes) para as
APIs Java baseia-se fundamentalmente nas interfaces.
Nao sei se ajudei, mas...
Rafael Chaves
Perfil Tecnologia
-----Mensagem original-----
De: paulo henrique castro <[EMAIL PROTECTED]>
Para: Kleber Bueno <[EMAIL PROTECTED]>
Cc: [EMAIL PROTECTED] <[EMAIL PROTECTED]>
Data: Sexta-feira, 6 de Abril de 2001 16:33
Assunto: Re: RES: [java-list] duvida iniciante - interface
>Hi!
>
>
>>Pense assim :
>>Interface Dirigir
>>Ela tem os metodos TrocaMarcha(),Acelera(),Freia()
>>
>>Ai voce cria uma classe Carro que implementa Dirigir
>>Nela voce vai ter os metodos TrocaMarcha(),Acelera(),Freia()
>>
>>Ai vamos dizer que voce tambem cria a classe Moto
>>Voce poderia usar os mesmos metodos.
>
>
> essa parte ja tinha entendido.. porem, continuo nao vendo
utilidade
>alguma!! Por que nao apenas declarar esses metodos em minhas classes
Carro
>e Moto, ao inves de ter que colocar implements Dirigir nas duas??????
> Serei obrigado a declarar todos os metodos da mesma forma!!
>
>
>>Depois disso voce cria uma outra classe que se chama
MeiodeTransporte
>>
>>O construtor dela recebe um parametro do tipo Dirigir
>>Ficaria assim
>>
>>public MeiodeTransporte(Dirigir g)
>>{
>> g.Acelera();
>> g.Freia();
>>}
>
>
> De acordo com os livros que estou lendo voce nao pode
instanciar
>uma interface, ou seja nao posso ter um objeto 'g' do tipo Dirigir,
pois
>dirigir e' uma interface e nao uma classe.
>
> Tenho certeza de que se nao fosse uma coisa importante a Sun
nao
>teria "inventado" as interfaces em Java.. so' nao consigo ver um
exemplo
>pratico para aplicacao de tal funcionalidade!!
>
> []s!
>
> PH
>
>
>___________________________________________________
>Paulo Henrique L. de Castro [EMAIL PROTECTED]
>
>Radio Antena 1 http://www.antena1.com.br
>
>
>------------------------------ LISTA
SOUJAVA ----------------------------
>http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
>dúvidas mais comuns: http://www.soujava.org.br/faq.htm
>regras da lista: http://www.soujava.org.br/regras.htm
>para sair da lista: envie email para
[EMAIL PROTECTED]
>---------------------------------------------------------------------
----
>
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------