Classe Abstrata x Interface

Qual é a diferença entre interface e classe abstrata ?
Pois uma classe que irá herdar de uma classe abstrata com métodos abstratos obrigatóriamente precisa sobrescrever o método, e uma classe que irá implementar uma interface também é obrigado a sobrescrever o método.

http://www.guj.com.br/posts/list/44273.java

Abraço!

Uma classe abstrata pode ter métodos não abstratos, o que não ocorre em uma interface.

Só comentando um pouco em cima da informação do Marcio, lembre-se que os métodos de uma interface vão ser sempre públicos e abstratos.

Abraço a todos…

Na classe abstrata você pode definir quais métodos você quer que as classes filhas implementem, além, também, de poder implementar métodos dentro dela.
Ex:

[code]
public abstract class A {
public void teste() {
doSomething();
}

protected abstract void doSomething();

}[/code]

No exemplo acima, todas as classes filhas de A deverão implementar o método doSomething(), mas não o método teste().
Ex:

public class B extends A { public B() {} protected void doSomething() { ... } }

Assim, posso chamar o método teste() da classe B, que executará o doSomething() sobrescrito da classe A, sem precisar do teste() em B. O exemplo é inútil, mas é pra ter idéia. ^^

Já a interface te obriga a implementar todos os métodos lá declarados, e dentro de uma interface haverá somente as assinaturas dos métodos, além de constantes.

Geralmente você usa class abstrata(herança) quando você tem um “padrão” comum e a interface quando você tem características em comum. Imagine que temos:

  • Funcionarios ( Faxineiro, Gerente, Diretor)
    Aqui você pode criar uma classe abstrata Funcionario que vai servir como superclasse para: Faxineiro, Gerente e Diretor. Pois todos seguem um padrão (rg, nome, cpf, matricula, etc…)

Agora digamos digamos que existem funcionarios que possuem senha para acessar o sistema, os quais você precisará criar em suas respectivas classes o atributo senha e o metodo autentica. Por que não criaria na classe abstrata Funcionarios? Faxineiro não acessa o sistema não precisa de senha!! E quando quisermos criar um metodo que use como argumento qualquer Funcionario que seja atutenticavel como faremos? Aí é que entra a interface… Podemos criar uma interface autenticável

interface Autenticavel{
    boolean autentica(int senha);
}

agora implementamos Gerente e Diretor como Autenticavel

public class Gerente extends Funcionarios implements Autenticavel{
...
...
public class Diretor extends Funcionarios implements Autenticavel{
...
...

Pronto… para que serve então a interface Autenticavel? Agora podemos criar um metodo em outra classe que leva como argumento qualquer Funcionario autenticavel:

public class TesteInterface{
    void login(Autenticavel funcionario){
...
...

Pronto! No metodo acima você poderia usar como argumento Diretor ou Gerente. Porém não poderia usar Faxineiro, pois ele não pertence a interface Autenticavel. É uma questão de referência.

Não sei se respondi sua dúvida…

Abraço…

Obrigado a todos, pergunta exclarecida .