Diferença entre classe abstrata e interface

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).