Diferença entre classe abstrata e interface em C #

Uma classe abstrata se parece muito com uma interface, mas o conceito é um pouco confuso para os iniciantes em OOP. Conceitualmente, uma classe abstrata se parece com uma interface, é claro, sem qualquer implementação, no entanto, elas têm seu quinhão de diferenças. Embora uma classe abstrata possa ser implementada parcial ou totalmente, uma interface deve ser implementada completamente. Bem, a diferença mais notável entre os dois é que uma classe abstrata pode ter implementação padrão, enquanto uma interface é apenas a definição de métodos que contém apenas as declarações de membro. Vamos discutir os aspectos teóricos de ambos em detalhes.

O que é uma classe abstrata?

Uma classe abstrata é um tipo especial de classe que atua como base de outras classes e não pode ser instanciada. A lógica de implementação de uma classe abstrata é fornecida por suas classes derivadas. Para tornar uma classe abstrata, o modificador “abstrato” é usado, o que significa que alguma implementação ausente precisa ser implementada na classe derivada dela. Ele contém membros abstratos e não abstratos. Uma classe abstrata se destina a fornecer funcionalidade básica que pode ser compartilhada e substituída por várias classes derivadas. É útil evitar qualquer tipo de duplicação de código. Eles se parecem muito com interfaces, mas com funcionalidade adicional.



Diferença entre classe abstrata e interface em C #



O que é uma interface?

Uma interface, por outro lado, não é uma classe que contém apenas a assinatura da funcionalidade. É um padrão sem implementação. Conceitualmente falando, é apenas a definição de métodos que contém apenas a declaração de membros. É um shell vazio que não contém a implementação de seus membros. É como uma classe base abstrata que contém apenas membros abstratos, como métodos, eventos, indexadores, propriedades, etc. Ela não pode ser instanciada diretamente e seus membros podem ser implementados por qualquer classe. Além disso, várias interfaces podem ser implementadas por uma classe, no entanto, uma classe só pode herdar uma única classe.

Classe abstrata vs. interface: diferença entre classe abstrata e interface em C #

  1. Herança múltipla- Uma classe pode usar apenas uma classe abstrata, portanto, herança múltipla não é suportada. Uma interface, por outro lado, pode suportar herança múltipla, o que significa que uma classe pode herdar qualquer número de heranças.
  2. DefiniçãodoClasse abstrata e interface em C #- Uma classe abstrata é um tipo especial de classe que pode conter definição sem implementação. A lógica de implementação é fornecida por suas classes derivadas. Ele pode ter métodos abstratos ou não abstratos. Uma interface, por outro lado, é apenas um padrão que não pode fazer nada. Tecnicamente, é apenas uma casca vazia.
  3. Implementação- Uma classe abstrata pode conter tanto a definição quanto sua implementação. É uma classe incompleta que não pode ser instanciada. Uma interface só pode ter a assinatura da funcionalidade sem nenhum código.
  4. Modificadores de acesso- Uma classe abstrata pode ter vários modificadores de acesso, como subs, funções, propriedades, etc., enquanto uma interface não pode ter modificadores de acesso e todos os métodos devem ser definidos implicitamente como públicos.
  5. Homogeneidade- Uma classe abstrata é usada para implementações do mesmo tipo, comportamento e status, enquanto uma interface é usada para implementações que compartilham apenas assinaturas de método.
  6. Declaração- Uma classe abstrata atua como uma classe base para todas as outras classes, de modo que pode declarar ou usar qualquer variável, enquanto uma interface não tem permissão para declarar nenhuma variável.
  7. Declaração do Construtor- Embora uma classe abstrata possa ter declaração do construtor, uma interface não pode ter declaração do construtor .
  8. Core vs. Periférico- Uma classe abstrata é usada para definir a identidade principal de uma classe e pode ser usada para objetos do mesmo tipo de dados. Uma interface, por outro lado, é usada para definir a habilidade periférica de uma classe.
  9. Rígido vs. Flexível- Uma classe abstrata é mais flexível em termos de funcionalidade, pelo menos do ponto de vista do desenvolvedor, enquanto uma interface é mais rígida.

Classe abstrata vs. interface: forma de tabela

Classe Abstrata

Interface

Uma classe abstrata pode ter todos os modificadores de acesso para a declaração de membro de funções, subs e propriedades. Uma interface não tem permissão para ter modificadores de acesso para declaração de membro de funções, subs, propriedades, etc. Todos os membros são considerados como implicitamente públicos.
Uma classe pode usar, no máximo, apenas uma classe abstrata. Uma classe pode herdar qualquer número de interfaces.
A herança múltipla não é compatível com a classe abstrata. Uma interface pode suportar herança múltipla.
Tecnicamente, é uma classe que pode ou não conter a definição e sua implementação. Uma interface só pode ter a assinatura de funcionalidade, então é basicamente um shell vazio.
Uma classe abstrata pode conter membros. consts, métodos definidos e stubs de método. Uma interface só pode conter métodos e consts.
Ele define a identidade principal de uma classe e é usado para descrever objetos do mesmo tipo de dados. É usado para descrever as habilidades periféricas de uma classe.
Os membros de uma classe abstrata não podem ser estáticos, a menos que seja um membro completo. Os membros de uma interface não podem ser estáticos.
É ideal para implementações do mesmo tipo e comportamento comum. É melhor usar interfaces se várias implementações compartilham apenas assinaturas de método.
Ele pode ter uma declaração do construtor. Não pode ter declaração de construtor .
Uma classe abstrata possui campos e constrantes predefinidos. Os campos não podem ser definidos em interfaces.
Ele pode ter métodos abstratos e não abstratos. Ele só pode ter métodos abstratos.

Resumo

Qual é a diferença entre uma classe abstrata e uma interface? Esta é provavelmente uma das perguntas mais comuns feitas em qualquer entrevista técnica. É provável que você encontre uma abundância de informações sobre classes abstratas e interfaces em qualquer tutorial C #; no entanto, entender a diferença entre as duas é a parte difícil. Você pode consolidar todas as informações que encontrar e ainda assim não conseguir o suficiente. Bem, conceitualmente, ambos são os termos mais importantes na programação e são praticamente os mesmos, no entanto, eles diferem muito em termos de funcionalidade. Enquanto uma classe abstrata é um tipo especial de classe que atua como base para outras classes, uma interface, por outro lado, é apenas um shell vazio com apenas declarações de membro.



Publicações Populares

Diferença entre oxidação e redução

Oxidação versus redução Na química orgânica e inorgânica, há muitas reações químicas que ocorrem quando duas moléculas são introduzidas uma na outra.

Juan Soto: o gato selvagem humano

Bandido Juan Soto perseguiu a Cordilheira da Costa da Califórnia com abandono - até que o xerife Harry Morse o alcançou

Diferença entre defensas americanas e mexicanas

Para-lamas americano x mexicano Quando se fala em para-lama, alguns adoram ter um para-lama americano e outros preferem os mexicanos. Embora tanto o americano quanto o



Diferença entre respiração celular e fotossíntese

Respiração celular versus fotossíntese Todos os seres vivos requerem um suprimento constante de energia para sobreviver. Um método de como os animais obtêm essa energia

Diferença entre RFP e RFI

RFP vs RFI Compreender a diferença entre RFP e RFI pode ajudá-lo a fazer seleções fortes quando precisar terceirizar. Se você está terceirizando para

A USO em seu 70º ano - Entrevista com Elaine Rogers

A USO comemora seu 70º aniversário em 2011. Elaine Rogers, presidente e CEO da USO do Metropolitan Washington, está com a organização há metade de sua existência. Em entrevista exclusiva, ela fala sobre a evolução da USO.