Interface x classe abstrata

Fala galera…

estava pensando…
quais as diferencas de definicao e uso entre classe abstrata e uma interface??

ambas nao definem apenas a chamada dos metodos??

valew

Rbarioni:

O que Interfaces e Classes Abstratas têm em comum é nâo podem ser instanciadas diretamente, mas através de sub-classes.
Numa Interface todos os o métodos devem ser públicos. E se houver atributos, estes devem ser public final, ou seja constantes.
Já numa Classe Abstrata, pode possuir métodos e atributos “normais”, já com implementação. Mas também há os métodos abstratos, dos quais há apenas sua assinatura - da mesma forma que nas Interfaces - e estes podem ser públicos ou protected (acho que privados não podem ser, mas não tenho certeza).

Espero ter ajudado.

Apenar para deixar mais claro:

metodos em interfaces sao implicitamente “public” e “abstract”. Atributos sao implicitamente “public static final”. Voce pode declarar com tais palavras-chave, mas nao eh obrigado, pois o Java faz isso para voec.

Classes abstratas podem conter tudo o que uma classe normal pode. A unica diferenca eh que elas nao pode ser diretamente instanciadas. Se voce declarar um metodo como “abstract”, entao necessariamente a classe tambem deve ser declarada como “abstract”.

A diferenca eh, como o Rafael Afonso ja disse, interfaces apenas definem os metodos que uma determinada classe deve/pode implementar, ja uma classe abstrata pode definir o corpo de alguns metodos ( ou todos, ou nenhum ). A outra diferenca eh que voce somente pode estender uma unica classe, mas pode implementar varias interfaces ao mesmo tempo.

Rafael

valew pelas dicas, xaras…

mas qdo seria vantajoso usar uma classe abstrata??

o lance da interface eu entendi agora…seria mais como um “molde” com os metodos q vc deve implementar…

falow

Isso eh muito mais uma questao de design do sistema, das tuas necessidades. Por exemplo, use interfaeces quando voce quiser que um conjuto de classes relacionadas tenham os mesmo metodos… um bom exepmlo disso eh voec definir uma interface “Carro” com os metodos "anda, “para”, “direita” etc… assim, todas as classes que implementarem “Carro” irao ter tais metodos.

Ja uma classe abstrata, voce pode definir certas partes dela e deixar para que as classes filhas implementem o corpo dos metodos abstratos, mais especificos para cada caso, por exemplo.

Rafael