Classe abstrata vs. interface
Classe abstrata (ou tipo) é um tipo de sistema de tipo nominativo declarado pelo programa. Embora o nome implique isso, uma classe abstrata pode ou não incluir métodos ou propriedades abstratas. A classe distinção refere-se a diferentes construções de linguagem que podem ser usadas para implementar tipos abstratos. As classes abstratas podem ser caracterizadas por uma questão de design que mantém a melhor programação orientada a objetos e por sua natureza inacabada.
Uma interface é um tipo abstrato que as classes devem implementar para especificar uma interface (genericamente falando). As interfaces podem conter apenas assinaturas de métodos e declarações constantes (estáticas e finais), nunca definições de métodos. As interfaces simulam várias heranças e são usadas para codificar semelhanças compartilhadas entre vários tipos de classes.
Tipos abstratos podem ser criados, significados ou simulados de várias maneiras diferentes. Um programador pode significar tipos abstratos usando a palavra-chave resumo explicitamente, incluindo um ou mais métodos na definição de classe, herdando de outro tipo abstrato sem substituir os recursos ausentes necessários para concluir a definição de classe ou enviando um método específico para o objeto orientado linguagem de programação conhecida como essa que não implementa o método diretamente.
As interfaces podem ser definidas usando métodos abstratos. Classes também podem ser implementadas em interfaces. Se uma classe implementa uma interface e não implementa todos os seus métodos, o resumo do significante deve ser usado; caso contrário, esse significante não é necessário (porque todas as interfaces são inerentemente abstratas). As classes também podem implementar várias interfaces.
Embora as interfaces sejam usadas para especificar interfaces genéricas, tipos abstratos podem ser usados para definir e aplicar o protocolo (que é um conjunto de operações que todos os objetos que implementam o protocolo desejado devem suportar). Tipos abstratos não ocorrem em idiomas sem subtipagem. Como esses subtipos são forçados a implementar todas as funcionalidades necessárias, garantindo a correção da execução do programa. Existem várias maneiras pelas quais os tipos abstratos podem ser criados: classes base abstratas completas são classes declaradas explicitamente como abstratas ou que contêm métodos abstratos (não implementados); Os sistemas comuns de objetos Lisp incluem mixins baseados no sistema Flavors; Java, é claro; e Traits, que atua como uma extensão do Smalltalk.
Resumo:
1. Classes (ou tipos) abstratas declaram programas; interfaces são tipos abstratos que todas as classes devem implementar para especificar sua interface.
2. Tipos abstratos podem ser significados usando a palavra-chave explicitamente; interfaces são inerentemente abstratas, portanto, não precisam ser significadas usando a palavra-chave (a menos que uma classe específica implemente uma interface, mas não implemente todos os seus métodos).