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!
Um comentário:
Tecnicamente é dessa forma que eles são implementados. Mas a pergunta "O que são ...?" tem a mais a ver com o fato de ambos serem abstracões que modelam classes do sistema. A classe abstrata modela uma família de classes que compartilham de atributos e/ou comportamento comuns e a interface define um contrato de comportamento comum que pode ser assumido por qualquer classe na forma de sua implementacão.
Postar um comentário