O post Interfaces X Classes Abstratas tem como objetivo efetuar uma comparação entre interfaces e classes abstratas a fim de sanar duvidas como: Quando devo usar uma classe abstrata ou uma interface?
Interfaces X Classes Abstratas
Interfaces:
- Uma interface não é considerada uma Classe e sim uma Entidade.
- Não possui implementação, apenas assinatura, ou seja, apenas a definição dos seus métodos sem o corpo.
- Todos os métodos são abstratos.
- Seus métodos são implicitamente Públicos e Abstratos.
- Não há como fazer uma instância de uma Interface e nem como criar um Construtor.
- Funcionam como um tipo de “contrato”, onde são especificados os atributos, métodos e funções que as classes que implementem essa interface são obrigadas a implementar.
Classes Abstratas:
- As classes abstratas devem conter pelo menos um método abstrato, que não tem corpo.
- É um tipo especial de classe que não há como criar instâncias dela.
- É usada apenas para ser herdada, funciona como uma super classe.
- Uma grande vantagem é que força a hierarquia para todas as sub-classes.
- É um tipo de contrato que faz com que as sub-classes contemplem as mesmas hierarquias e/ou padrões.
Visão Geral
Quando nos criamos uma Interface, nós estamos basicamente criando um set de métodos sem qualquer implementação que deve ser herdado por outras classes já implementadas. A vantagem é que desta forma consegue-se prover um caminho para uma classe ser parte de duas classes: uma herdada hierarquicamente e outra da Interface.
Quando nos criamos uma Classe Abstrata, nós estamos criando uma classe base que pode ter um ou mais métodos completos, mas pelo menos um ou mais destes métodos tem que criados incompletos (sem corpo), isto caracteriza uma Classe Abstrata.
Vale lembrar que, se todos os método da Classe abstrata forem sem corpo, ela se torna uma Interface.
O propósito de uma Classe Abstrata é prover uma base de definições de como um set de Classes Derivadas irão trabalhar e então permitir os programadores de preencher as implementações nas Classes derivadas.
Comparativo entre Interfaces X Classes Abstratas
Abaixo um quadro comparativo para tornar mais fácil a compreensão entre diferenças e similaridades entre Classes Abstratas e Interfaces.
Característica | Interface | Classe Abstrata |
Herança múltipla | Uma classe pode implementar diversas interfaces | Uma classe pode herdar somente uma classe |
Implementação Padrão | Uma interface não pode conter qualquer tipo de código, muito menos código padrão. | Uma classe abstrata pode fornecer código completo, código padrão ou ter apenas a declaração de seu esqueleto para ser posteriormente sobrescrita. |
Constantes | Suporte somente constantes do tipo estática. | Pode conter constantes estáticas e de instância. |
Componentes de terceiros | Uma implementação de uma interface pode ser incluída a qualquer classe de terceiros. | Uma classe de terceiros precisa ser reescrita para estender somente a partir da classe abstrata. |
Homogeneidade | Se todas as diversas implementações compartilham a assinatura do método então a interface funciona melhor. | Se as várias implementações são todas do tipo e compartilham um comportamento e status comum , então a classe abstrata funciona melhor. |
Manutenção | Se o código do seu cliente conversa somente em termos de uma interface, você pode facilmente alterar a implementação concreta usando um método factory. | Idêntico |
Velocidade | Lento, requer trabalho extra para encontrar o método correspondente na classe atual. | Rápido |
Clareza | Todas as declarações de constantes em uma interface são presumidamente publicas ou estáticas. | Você pode por código compartilhado em uma classe abstrata. Você pode usar código para computar o valor inicial de suas constantes e variáveis de instância ou estáticas. |
Funcionalidades Adicionais | Se você incluir um novo método em uma interface você precisa ajustar todas as implementações da interface. | Se você incluir um novo método em uma classe abstrata você tem a opção de fornecer uma implementação padrão para ele. |
fonte: devmedia
Super dicas
Quer aprender muito mais sobre programação orientada a objetos? Então se inscreva no curso Programação Orientada a Objetos utilizando a linguagem C#.
Se inscreva em nosso canal e compartilhe as matérias que gostar com os seus colegas.
Participe dos nossos grupos de estudos do Facebook, WhatsApp desenvolvimento de sistemas, Telegram desenvolvimento de sistemas e WhatsApp desenvolvimento de jogos.
Aproveite também e venha fazer parte do nosso clube de vantagens e ter acesso exclusivo a vídeos, tutoriais, cursos e muito mais.
Clique no link para se tornar um membro do dfilitto – clube de vantagens e ter acesso a todos os benefícios do nosso clube.