Diferença entre Abstract Class e Interface in C # Diferença entre

Anonim

Uma classe abstrata se parece muito com uma interface, mas o conceito é um pouco confuso para os iniciantes do OOP. Conceitualmente, uma classe abstrata se parece exatamente com uma interface, é claro, sem qualquer implementação, no entanto, eles têm sua justa parcela de diferenças. Enquanto uma classe abstrata pode ser parcial ou totalmente implementada, 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 dos membros. 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 instanciado. A lógica de implementação de uma classe abstrata é fornecida por suas classes derivadas. Para fazer uma classe abstrata, o modificador "abstrato" é usado, o que significa que algumas implementações faltantes precisam ser implementadas na classe derivada dela. Contém membros abstratos e não abstratos. Uma classe abstrata destina-se a fornecer funcionalidades básicas que podem ser compartilhadas e substituídas por várias classes derivadas. É útil evitar qualquer tipo de duplicação de código. Eles parecem muito com interfaces, mas com funcionalidades adicionais.

O que é uma interface?

Uma interface, por outro lado, não é uma classe que contém apenas a assinatura de 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 de base abstrata que contém apenas membros abstratos, como métodos, eventos, indexadores, propriedades, etc. Não pode ser instanciado 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 versus interface: diferença entre Classe abstrata e Interface em C #

  1. Herança múltipla - Uma classe só pode usar uma classe abstrata, portanto, a herança múltipla não é suportada. Uma interface, por outro lado, pode suportar múltiplas heranças, o que significa que uma classe pode herdar qualquer número de herança.
  2. Definição de Classe e interface abstrata em C # - Uma classe abstrata é um tipo especial de classe que pode conter a definição sem implementação. A lógica de implementação é fornecida por suas classes derivadas. Pode ter métodos abstratos e não abstratos.Uma interface, por outro lado, é apenas um padrão que não pode fazer nada. Tecnicamente, é apenas uma concha vazia.
  3. Implementação - Uma classe abstrata pode conter a definição e 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 tem permissão para ter modificadores de acesso e todos os métodos devem ser definidos como públicos de forma implícita.
  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étodos.
  6. Declaração - Uma classe abstrata atua como uma classe base para todas as outras classes para que ele possa declarar ou usar qualquer variável enquanto uma interface não está autorizada a declarar quaisquer variáveis.
  7. Declaração do construtor - Enquanto uma classe abstrata pode ter uma declaração do construtor, uma interface não pode ter uma declaração do construtor.
  8. Core vs. Peripheral - Uma classe abstrata é usada para definir a identidade central de uma classe e pode ser usada para objetos do mesmo tipo de dados. Uma interface, por outro lado, é usada para definir a capacidade periférica de uma classe.
  9. Rigid vs Supple - Uma classe abstrata é mais flexível em termos de funcionalidade, pelo menos da perspectiva de um desenvolvedor, enquanto uma interface é mais rígida.

Classe abstrata versus interface: formulário de tabela

Classe abstrata

Interface

Uma classe abstrata pode ter todos os modificadores de acesso para declaração de membros, subs e propriedades. Uma interface não é permitida para ter modificadores de acesso para declaração de membros, subs, propriedades, etc. Todos os membros são assumidos como implicitamente públicos.
Uma classe pode, no máximo, usar apenas uma classe abstrata. Uma classe pode herdar qualquer número de interfaces.
A herança múltipla não é suportada na classe abstrata. Uma interface pode suportar múltiplas heranças.
Tecnicamente, é uma classe que pode ou não conter a definição e sua implementação. Uma interface só pode ter a assinatura da funcionalidade, portanto é 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.
Define a identidade central de uma classe e é usada 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 sejam membros completos. 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 compartilhem apenas assinaturas de métodos.
Pode ter uma declaração do construtor. Não pode ter declaração do construtor.
Uma classe abstrata possui campos e relações pré-definidos. Os campos não podem ser definidos nas interfaces.
Pode ter métodos abstratos e não abstratos. Só pode ter métodos abstratos.

Resumo

Qual a diferença entre uma classe abstrata e uma interface? Esta é provavelmente uma das questões mais comuns feitas em qualquer entrevista técnica. É provável que você encontre uma infinidade de informações sobre classes abstratas e interfaces em qualquer tutorial do C #, no entanto, entender a diferença entre os dois é bastante difícil. Você pode consolidar todas as informações que você pode encontrar e ainda não conseguir o suficiente. Bem, conceitualmente, ambos são os termos mais importantes na programação e são bastante iguais, 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 membros.