Classes Abstratas X Interfaces


Uma classe abstrata pode conter métodos completos ou incompletos. UmaInterface pode conter apenas a assinatura de um método,  mas nenhum corpo ou implementação.
Portanto, em uma classe abstrata, pode-se implementar  métodos, mas em umaInterface não.
Uma classe abstrata pode conter campos, construtores, ou destrutores e aplicar propriedades. Uma interface não pode conter campos, construtores, ou destrutores; pode possuir apenas a propriedade da assinatura, mas não a implementação.
Uma classe abstrata não suporta múltiplas heranças, mas uma interface pode suportar múltiplas heranças, assim uma classe pode herdar várias interfaces, mas apenas uma classe abstrata e uma classe que implementa uma interface tem de obrigatoriamente implementar todos os métodos da interface, mas o mesmo não é exigido no caso de uma classe abstrata, que são mais rápidas que as interfaces.
 Então, quando devo utilizar o quê?
Classes Abstratas podem adicionar mais funcionalidades sem destruir as funcionalidades das classes filhos que poderiam estar usando uma versão mais antiga. Classes abstratas fornecem uma maneira simples e fácil para versionarnossos componentes e através da atualização da classe base, todas as classes que herdam são atualizadas automaticamente com a mudança.
Em uma interface a criação de funções adicionais terá um efeito sobre suas classes filhos, devido à necessidade de implementação dos Métodos criados nainterface. Então, classes abstratas deveriam ser usadas principalmente para objetos que estão estritamente relacionados, enquanto o uso de interfaces é mais adequado para fornecer funcionalidade comum a classes independentes.
Digamos que existem duas classes, de pássaros e de aviões, e nas duas existam os métodos chamados voar(). Seria estranho para uma classe avião herdar a classe pássaro apenas porque necessita do método voar(). Em vez disso, o método voar() deve ser definido em uma interface e em ambas as classes pássaro e avião  devem implementar a interface. Se quisermos proporcionar uma funcionalidade em comum para os componentes, devemos utilizar uma classe abstrata.
Classes abstratas nos permitem implementar parcialmente uma classe, enquanto ainterface não contem a implementação de qualquer membro, por isso a seleção de interface ou classes abstratas depende das necessidades e design do nosso projeto.
Podemos fazer uma classe abstrata, interface, ou até uma  combinação de ambas, dependendo de nossas necessidades.
Conclusão
Devemos utilizar classes abstratas quando queremos compartilhar funcionalidades em comum entre classes e utilizar interfaces quando desejamos que uma classe possua as mesmas assinaturas porém a implementação de cada método não precisa ser a mesma.

Comentários

Postagens mais visitadas deste blog

Serial, Ativador do IDM - Internet Download Manager

Alfabeto Binário A -a

Número da ANATEL, Telefone da ANATEL (0800) - Entre em contato com a ANATEL

Caso de Joana Marcenal: Falso médico atende menina e Pai da menina Joanna diz estar abalado com a morte da filha

Como evitar que a poluição do ar afete a saúde? Dicas para se prevenir da poluição do AR