Olá Eduarda, tudo bem?
Teoricamente uma interface é uma classe abstrata sem implementações, que obriga as classes que a implementam a explicitarem um código. Mas ainda tem algumas diferenças.
Cada classe só pode herdar de uma classe (abstrata ou não), mas pode implementar várias interfaces. Com interfaces é possível criar pequenas "exigências" para quem a implementam, então se a classe em questão deve ter várias exigencias, elas podem ser divididas em várias outras interfaces para serem reusadas apenas onde faz sentido.
Classes abstratas devem ser usadas apenas quando as classes filhas devem ter todas as características em comum a essa classe mãe, por exemplo, uma caneta tem corpo, e você pode escrever. A caneta esferográfica tem carga, tem cor, tampa, grossura dada ponta. Uma caneta tipo pena tem um tinteiro, você pode recarregar. Uma canetinha pode secar se não ficar tampada. No entanto todas elas tem um corpo e você pode escrever. (Sim, não foi o melhor dos exemplos, mas a ideia é mesmo mostrar o compartilhamento de características)
As interfaces tendem a serem mais estáveis com menos mudanças, afinal não tem implementação para mudar, o código que pode mudar é na própia classe que implementa a interface. Nesta altura do curso você já viu a parte do polimorfismo onde você pode definir um tipo mais genérico como retorno de função. Com interfaces é possível utilizar qualquer tipo que implemente essa interface definida como retorno. Um exemplo é utilizando a interface IEnumerable
como retorno, você pode retornar um Array
, List
, HashSet
ou qualquer outro tipo que implemente essa interface, e isso te dá algumas possibilidades, mesmo apenas utilizando a biblioteca padrão do .Net.
O desenvolvimento web faz grande uso de interfaces e no decorrer dos cursos ficará mais clara essa "preferência" pelo uso de interfaces ao invés das classes abstratas.
Espero ter ajudado!