Diferença entre interface e classe abstrata em Java e C #

Autor: Laura McKinney
Data De Criação: 1 Abril 2021
Data De Atualização: 5 Poderia 2024
Anonim
Diferença entre interface e classe abstrata em Java e C # - Tecnologia
Diferença entre interface e classe abstrata em Java e C # - Tecnologia

Contente


A interface e a classe Abstract contribuem para o "tipo incompleto" no POO. Às vezes, precisamos de uma superclasse para definir "o que fazer", mas, não "como fazer", é como fazer parte será implementada pela classe derivada de acordo com sua necessidade ",interface”Fornecer uma solução para isso. Às vezes, precisamos de uma classe de superclasse que defina alguma estrutura generalizada que possa ser implementada por classes derivadas e alguma estrutura especificada que possa ser utilizada pelas classes derivadas, "classe abstrata”Fornece uma solução para isso. A diferença fundamental entre interface e classe abstrata é que a interface é totalmente incompleta e a classe abstrata é parcialmente incompleta.

  1. Gráfico de comparação
  2. Definição
  3. Principais diferenças
  4. Conclusão

Gráfico de comparação

Base para ComparaçãoInterfaceClasse abstrata
BasicQuando você conhece apenas os requisitos e não a implementação, você usa "Interface".Quando você conhece parcialmente as implementações, usa "Classes abstratas".
MétodosA interface contém apenas métodos abstratos.A classe Abstract contém métodos abstratos, bem como métodos concretos.
Modificador de acesso de métodosOs métodos de interface são sempre "Público" e "Abstrato", mesmo que não declaremos. Por isso, pode ser dito como 100%, pura classe abstrata.Não é obrigatório que o método na classe abstrata seja público e abstrato. Também pode ter métodos concretos.
Modificador restrito para métodosUm método de interface não pode ser declarado com os seguintes modificadores:
Público: Privado e Protegido
Resumo: final, estático, sincronizado, nativo, strictfp.
Não há restrições nos modificadores da variável de classe abstrata.
Modificador de acesso de variáveisO modificador de acesso permitido para variáveis ​​de interface é público, estático e final, independentemente de estarmos declarando ou não.As variáveis ​​na classe abstrata não precisam ser públicas, estáticas, finais.
Modificadores restritos para variáveisAs variáveis ​​de interface não podem ser declaradas como privadas, protegidas, transitórias, voláteis.Não há restrição para os modificadores de variáveis ​​de classe abstrata.
Inicialização de variáveisAs variáveis ​​de interface devem ser inicializadas no momento da sua declaração.Não é obrigatório que variáveis ​​de classe abstrata sejam inicializadas no momento de sua declaração.
Instância e blocos estáticosNa interface interna, você não pode declarar uma instância ou bloco estático.A classe Abstract permite uma instância ou bloco estático dentro dela.
ConstrutoresVocê não pode declarar construtor dentro da interface.Você pode declarar construtor dentro de uma classe abstrata.


Definição de Interface

Java não permite herança múltipla. Ou seja, uma única classe não pode herdar mais de uma classe por vez. A razão por trás disso pode ser explicada com um exemplo. Vamos supor que tenhamos duas classes pai, A e B e uma classe derivada C. A classe derivada C herda as classes A e B.Agora, ambas as classes A e B têm o método set (), então será uma pergunta para a classe C qual método set () da classe deve herdar. A solução para esse problema é "interface".

Interface é uma classe abstrata pura. A palavra-chave usada para criar uma interface é "interface". Como todo o método dentro da interface é totalmente abstrato. A interface especifica apenas o que uma classe deve fazer, mas não define como faz. Só porque todo o método declarado dentro da interface é abstrato, nenhuma instância é criada para uma interface. A forma geral de "interface" em java é:


access_specifier interface nome_da_ interface {tipo de retorno método-nome1 (lista de parâmetros); return-type method-name2 (lista de parâmetros); tipo final-varname1 = value; tipo final-varname2 = value; // ... return-type method-nameN (lista de parâmetros); tipo final-varnameN = value; }

O especificador de acesso é declarado público porque as classes precisam implementar a interface.

Não temos o conceito de "Interface" em C ++. Mas, Java e C # definem a interface muito bem.

Interface em Java:

  • As variáveis ​​de uma interface são por padrão sempre públicas, estáticas e finais.
  • As variáveis ​​devem ser inicializadas no momento da sua declaração.
  • As variáveis ​​nunca podem ser declaradas como privadas, protegidas, transitórias e voláteis.
  • Os métodos de uma interface são sempre públicos e abstratos, ao passo que nunca podem ser declarados como privados, protegidos, finais, estáticos, sincronizados, nativos e strictfp.
  • Você não pode declarar nenhum construtor dentro da interface, pois o principal objetivo do construtor é a inicialização das variáveis ​​de classe, mas, na interface, as variáveis ​​são inicializadas no momento de sua declaração.
  • A interface pode herdar outras interfaces, mas a classe que implementa essa interface deve implementar os métodos de todas as interfaces herdadas.
  • Uma classe pode herdar mais de uma interface por vez e deve implementar todos os métodos de todas as interfaces herdadas.

A forma geral de implementar uma interface em Java:

classe class_name implementa Interface_name {// class-body}

Para herdar uma interface, uma classe usa a palavra-chave "implementa", e a classe implementa todo o método declarado por uma interface herdada.

Interface em c #:

A interface em C # é quase semelhante à interface em Java, exceto:

  • A interface em C # não declara variáveis.
  • O nome da interface é prefixado com I maiúsculo e é herdado com um sinal de dois pontos (:).

A forma geral de implementar uma interface em C #:

classe class_name: interface_name {// corpo da classe}

Definição de Classe Abstrata

Uma classe que contém um ou mais métodos abstratos é chamada de classe abstrata, e uma classe é declarada como abstrata usando a palavra-chave "abstract", precedida pela palavra-chave "class" no início da declaração de classe. Como a classe abstrata contém o método abstrato, ela constitui um tipo incompleto. Portanto, você não pode criar objetos de uma classe abstrata. Sempre que uma classe herda uma classe abstrata, ela deve implementar todos os métodos abstratos da classe abstrata, caso contrário, também deve ser declarada como abstrata.O atributo abstract é herdado até que a implementação completa dos métodos abstratos seja alcançada.

A classe abstrata também pode conter métodos concretos que podem ser utilizados pela classe derivada como ela é. Mas você não pode declarar um construtor abstrato ou um método estático abstrato dentro de uma classe abstrata. A forma geral da classe abstrata em Java é a seguinte:

classe abstrata class_name {abstract method_name1 (); resumo method_name2 (); : return_type method_name3 (lista de parâmetros) {// método concreto} return_type method_name4 (lista de parâmetros) {// método concreto}};

O conceito de uma classe abstrata é semelhante em Java e C #. Uma classe abstrata é um pouco diferente em C ++.

Em C ++, se uma classe tiver pelo menos uma função virtual, a classe se tornará uma classe abstrata. Em vez da palavra-chave "resumo", a palavra-chave "virtual" é usada para declarar um método abstrato.

  1. Quando você tem o conhecimento de "o que é necessário", mas não de "como seria implementado", a interface deve ser usada. Por outro lado, se você sabe o que é necessário e sabe parcialmente como isso seria implementado, use uma classe abstrata.
  2. Uma interface possui todos os seus métodos abstratos, mas uma classe abstrata possui alguns métodos abstratos e outros concretos.
  3. Os métodos dentro de uma interface são públicos e abstratos, portanto, também é chamado como uma classe abstrata pura. Por outro lado, os métodos dentro de um resumo não se restringem apenas a ser públicos e abstratos.
  4. Um método de interface nunca pode ser privado, protegido, final, estático, sincronizado, nativo ou strictfp. Por outro lado, não há restrições aos métodos de uma classe abstrata.
  5. As variáveis ​​em uma interface são públicas e finais, independentemente de as declararmos ou não, ao passo que não existe essa restrição para as variáveis ​​de uma classe abstrata serem públicas e finais apenas.
  6. Variáveis ​​em uma interface nunca podem ser protegidas por transientes ou voláteis, enquanto que não há restrição a variáveis ​​em uma classe abstrata.
  7. A variável de uma interface deve ser inicializada durante a declaração. Por outro lado, as variáveis ​​em uma classe abstrata podem ser inicializadas a qualquer momento.
  8. Dentro de uma interface, uma instância ou bloco estático não pode ser declarado, mas você pode declarar instância ou bloco estático dentro de uma classe abstrata.
  9. Você não pode definir construtor dentro de uma interface, enquanto que é possível definir construtor dentro de uma classe abstrata.

Conclusão:

Quando você precisa criar uma classe base que contém uma forma generalizada de métodos que podem ser implementados pelas classes derivadas de acordo com suas necessidades, o conceito de interface e classe abstrata ajuda a fazer isso.