Posso dizer que umas das diferenças entre Classe Abstrata e Interface seria que a classe abstrata podemos implementar métodos e podemos definir métodos abstratos e interface só tem métodos abstratos ?
Os métodos implementados na super-classe abstrata precisa ser implementados também na sub-classe ?
A classe abstrata existe somente para ser extendida, ela passa a ser uma classe generica que fornecera metodos genericos que outras subclasses concretas da mesma arvore de herança irao sobrepor, fornecendo um codigo especifico para estes metodos. Ou seja o metodo abstrato em um subclasse concreta deve ser sobreposto.
Uma classe abstrata pode conter metodos que nao seja abstrato, porem se um metodo for declarado como abstrato, toda a classe sera abstrata, vc devera marcar a classe como abstrata.
Interface é uma classe 100% abstrata, todos os seus metodos sao abstratos, e uma classe podera implementar varias interfaces.
E a diferença de uma classe abstrata e de uma interface, e que a interface pode ser implementada por qualquer classe mesmo vindo de uma arvore de herança completamente diferente. Ja a classe abstrata so pode ser extendida por classes que fazem parte de uma mesma arvore herança.
Isso e so um resumo sobre este assunto, mas essa e uma grande diferença entre as duas , mas existem outras coisas que vc deve pesquisar…o assunto e um pouco extenso…
Complementando o post do Robson, além da diferença básica exposta podemos pensar que uma classe abstrata define algo… Abstrato
Por exemplo, podemos ter uma classe abstrata Carro que contém os métodos básicos de todo carro, como “darPartida”, “frear” e assim vai, mas ela pode conter métodos abstratos que dependem da implementação, como “dispararAlarme” e diversos carros tem tipos de alarmes diferentes, etc, as classes que forem subclasses de “Carro” definem qual carro ele é, por exemplo você pode criar uma classe “Gol” e definir coisas específicas de um Gol.
Enquanto que as interfaces definem coisas que a classe pode realizar, um “Carro” pode implementar uma interface “Acelerável” que define que ele pode ser acelerado, assim vai…
Dei um exemplo rápido e não muito bem elaborado, mas a diferença básica é: uma classe abstrata define algo abstrato que será mais refinado em subclasses, interfaces definem funções que determinada classe pode realizar.