Diferença entre interface e classe abstrata:
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…
Ate mais…