Qual é a diferença entre classe abstrata e interface em Java

Isso foi me perguntado semana passada….

A resposta:

Classe Abstrata é uma classe que não pode ser instanciada, pode possuir métodos abstratos (ou seja, sem implementação) e que somente pode ser extendida (ou seja, as classes filhas somente podem herdar de uma única classe abstrata).

Interface é uma estrutura que também não pode ser instanciada, possui sempre métodos abstratos e podem ser implementadas em várias classes (ou seja, as classes filhas podem herdar de uma ou mais interfaces).

Exemplo:

//Classe abstrata Som
abstract class Som {
    public abstract void tocar();
    public void info() {
           System.out.println(“Testando som, 1, 2, 3”);
    }
}

//Classe abstrata Video
abstract class Video {
     public abstract void exibir();
     public void info() {
            System.out.println(“Luzes, Camera e Acao”);
     }
}

//Classe Musica que extende a classe Som (funciona!)
class Musica extends Som {
       public void tocar() {
              System.out.println(“Do re mi fa sol la si”);
       }
}

//Classe Filme que extende as classes Video e Som (não funciona…)
class Filme extends Video, Som {
       public void tocar() {
              System.out.println(“Do re mi fa sol la si”);

       }
       public void exibir() {
               System.out.println(“Vendo o filme”);
       }

}

A classe Filme somente funcionaria, se as classes abstratas Video e Som fossem interfaces:

//Interface Video (não há implementação de método)
interface Video {
      public void exibir(); 
}

//Interface Som (não há implementação de método)
interface Som {
      public void tocar();
}

//Classe Filme que implementa as interfaces Video e Som (funciona…)
class Filme implements Video, Som {
       public void tocar() {
              System.out.println(“Do re mi fa sol la si”);

       }
       public void exibir() {
               System.out.println(“Vendo o filme”);
       }

}

Complicado, não? Mas com o tempo, a gente pega a prática… 🙂

Até mais!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do programador java.