Classe Abstrata X Interface

:shock: olá pessoal alguem tm uma boa dica ai q explique

classa abstrata e inteface

vlw

Classes abstratas não são instanciadas, assim como as interfaces também não são.

Classes abstratas permitem escrever algum método com implementação, as interfaces não permitem.

As interfaces regem as características de uma determinada classe. E uma classe pode implementar ‘0-n’ interfaces. Diferente das classes abstratas, onde só pode herdar de uma única.

A idéia da interface é fornecer um contrato entre as classes que a implementam e as classes que a usam. Assim, se uma classe implementa uma interface X, qualquer classe que resolva usar a funcionalidade de X, pode usar, de forma que as implementações possam ser substituídas livremente.

Eu acho legal usar abstract classes em conjunto com interfaces, quando algum dos métodos da interface pode ter uma implementação padrão.

As interfaces são a maneira mais fácil de visualizar em código o conceito polimorfismo. Além do que já foi explicado, uma interface pode agregar “qualidades” (bem como funcionalidades) a diferentes objetos do modelo. No exemplo de um jogo:

interface Killable {} // algo que pode ser morto
interface Movable {} // algo que pode se mover
interface Updatable{} // algo que pode ser atualizado periodicamente
interface Renderable {} // algo que pode ser "desenhado" em tela

Junto com as classes abstratas, estas interfaces provém funcionalidades básicas para as classes concretas que você escreve. Basicamente, definimos classes abstratas com lógica “padrão” para as interfaces definidas, e as classes concretas estendem as classes básicas (abstratas) para prover funcionalidades específicas.

Rodrigo

Interfaces estão ligadas a comportamento.
Classes abstratas estão ligadas a implementação.

Existe um tutorial aqui no guj q vc pode ler para entender melhor a utilização de interface e daí tirar suas próprias conclusões com relação às classes abstratas.

Tutorial de interfaces

[]'s

No caso de interface também sao usadas para guardar as constantes que serão utilizadas na implementaçao. Assim padronizando mais as implementações.

so para nao esquecer… que as classes abstratas fazem parte da herança… ao contrario da interface nao faz parte da herança java. Ou seja, sua class abstract extends a Object sua interface nao… ja que interface so pode extends a outra interface… e como ela nao faz parte da herança uma classe pode implementar varias interface. Se ela fizesse parte da herança isso nao seria possivel :smiley:

Uma forma simples de ver a coisa, somente pelo lado do compilador, é assim:

Uma interface é 100% abstrata, uma classe abstrata, necessariamente, não.

Interface: Todos os métodos são abstratos. 100%

Classe abstrata:
Pode ou não ter métodos abstratos. 0%-100%

Blz? :thumbup:

[quote=rmarin]Uma forma simples de ver a coisa, somente pelo lado do compilador, é assim:

Uma interface é 100% abstrata, uma classe abstrata, necessariamente, não.

Interface: Todos os métodos são abstratos. 100%

Classe abstrata:
Pode ou não ter métodos abstratos. 0%-100%

Blz? :thumbup: [/quote]

Simplesmente… Ótimooo!!!