Dúvidas sobre classe abstrata e interface

1 - Qual a diferença de uma classe que é filha(herança) de uma classe com método abstrato para uma classe que implementa um interface, ou seja, a diferença entre abstrata e interface?

2 - E em qual momento devo usar uma interface ou uma classe abstrata?

  1. Você pode implementar quantas interfaces quiser, e só pode ser filho de uma única classe abstrata;
  2. Classes abstratas podem conter métodos protected, atributos e implementações;

Classe abstrata você deve usar somente se a classe filha tiver uma relação de “é um” com a classe pai.
A interface é uma relação mais leve, que só indica que uma classe X implementa um determinado contrato (que é definido pela interface).

Geralmente, é uma boa até mesmo criar uma interface, mesmo que você tenha uma classe abstrata.

Para mais detalhes leia aqui:
http://www.guj.com.br/posts/list/51866.java#273198

E aqui:
http://www.guj.com.br/posts/list/55387.java#290673

E aqui:
http://www.guj.com.br/posts/list/66697.java#351305

Completando

Uma classe extends a classe abstrata quando vai utilizar todos (ou quase todos) recursos que ela oferece “quando É UM objeto do tipo”.
Imagine que uma classe abstrata tem uns 10 atributos e uns 10 metodos e voce precisa usar apenas 2 desses metodos, se você for extender a ela vai ficar muita informação que você não necessita isso quebra um dos conceitos da Orientação a Objetos que é a coesão (que uma classe deve especifica ao seu objetivo), neste caso você cria uma interface “contrato” com apenas esses dois metodos e você mantem a coesão da sua classe.

[quote=erickfm8]Completando

Uma classe extends a classe abstrata quando vai utilizar todos (ou quase todos) recursos que ela oferece “quando É UM objeto do tipo”.
Imagine que uma classe abstrata tem uns 10 atributos e uns 10 metodos e voce precisa usar apenas 2 desses metodos, se você for extender a ela vai ficar muita informação que você não necessita isso quebra um dos conceitos da Orientação a Objetos que é a coesão (que uma classe deve especifica ao seu objetivo), neste caso você cria uma interface “contrato” com apenas esses dois metodos e você mantem a coesão da sua classe.[/quote]

Não é bem assim o conceito de interface não. Se vc tiver dois métodos em uma interface, a classe q implementar esta, terá que obrigatoriamente escrever o código destes métodos.
Por Exemplo (sei q não se usa isso, mas é o q eu consegui pensar agora pra exemplificar) :
Uma interface BancoDeDados q tem dois métodos, salvar e excluir. Como é uma interface estes métodos são vazios, sem código algum.
Uma Classe q implementa esta interface chamada BancoDeDadosOracleImpl, os códigos dos dois métodos são feitos de acordo com o jeito q o oracle funciona.
Outra Classe q implementa a interface BancoDeDados chamada BancoDeDadosDB2Impl, com os códigos dos dois métodos utilizando este banco de dados.

Isso será uzado em uma classe posterior.
Por exemplo uma aplicaçãozinha em desktop q inclui e exclui um cliente.
se vc colocar assim:

BancoDeDados bd = new BancoDeDadosOracleImpl();
bd.salvar(cliente);

Aí caso vc não queira mais usar o oracle, queira usar o DB2. Fácil, só mudar de implementação:

BancoDeDados bd = new BancoDeDadosDB2Impl();
bd.salvar(cliente);

O código de sua aplicação desktop continua o mesmo sem mudar nada, só q agora é feito em um banco de dados DB2.

Isso é uma interface. É pra isso q serve.
Classes abstratas não podem ser instanciadas, então quem extender desta será do tipo dela e fará tudo o q ela faria e mais coisas ainda.
É um conceito de OO para reduzir a quantidade de código.
Uma classe abstrata seria criada para que códigos em comum e várias classes possam ser reaproveitadas.

aluisiodsv não sei aonde mudou muito do que eu falei

Foi o que eu falei.

completando acho que o principal conceito de OO que para interface que você esqueceu de falar,
Interface = POLIMORFISMO.

Sim, realmente vc já tinha falado sobre a classe abstrata.

agora …
Interface = Polimorfismo ??

Cara … explica isso direito ??
AUHUAhuaUHUAhuAHUAhua

Vc sabe o q é polimorfismo ?
Vc sabe pra q serve uma interface realmente ? Pra q este tipo de contrato é necessária ? Já utilizou alguma vez ? Acho q vc utilizou da maneira errada.

O uso certo da interface na maioria das vezes provem o polimorfismo, isso é o básico

O que é o polimorfismo ?
É voce poder referenciar um objeto de varias formas (“basicamente”)

O que a interface faz?
Exatamente isto , voce declara o objeto como uma interface e todos que implementar essa interface pode dar o new naquela declaração

Aaahh siim … !!
Isso é vdd … !!

Me foquei na explicação do polimorfismo para OO, que diz sobre os métodos e tals …
mas realmente seria uma forma de polimorfismo!