Recomendado, 2024

Escolha Do Editor

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

A classe Interface e Abstract contribuem para o “tipo incompleto” na OOP. À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 ” fornece 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 está totalmente incompleta e a classe abstrata está parcialmente incompleta.

Gráfico de comparação

Base para ComparaçãoInterfaceClasse abstrata
BasicQuando você só tem o conhecimento dos requisitos não sobre sua implementação, você usa "Interface".Quando você conhece parcialmente as implementações, você usa "Classes abstratas".
MétodosInterface contém apenas métodos abstratos.A classe abstrata contém métodos abstratos, assim como métodos concretos.
Modificador de Acesso de MétodosOs métodos de interface são sempre "públicos" e "abstratos", mesmo que não declaremos. Assim, pode-se dizer como 100%, classe abstrata pura.Não é obrigatório que o método na classe abstrata seja público e abstrato. Pode ter métodos concretos também.
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 sobre os modificadores da variável de classe abstrata.
Modificador de Acesso de VariáveisModificador de acesso permitido para variáveis ​​de interface são públicas, estáticas e finais, se estamos 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 nos modificadores de variáveis ​​de classe abstrata.
Inicialização de variáveisAs variáveis ​​da interface devem ser inicializadas no momento de sua declaração.Não é obrigatório que variáveis ​​de classes abstratas sejam inicializadas no momento de sua declaração.
Instância e blocos estáticosDentro da interface, você não pode declarar uma instância ou um bloco estático.A classe abstrata permite uma instância ou bloco estático dentro dela.
ConstrutoresVocê não pode declarar o construtor dentro da interface.Você pode declarar o 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 temos duas classes pai, A e B e uma classe derivada C. A classe derivada C herda ambas as classes A e B. Agora, ambas têm a classe A e B com método set (), então será uma questão para a classe C, qual método set () da classe deve herdar. A solução para este 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 apenas especifica o que uma classe deve fazer, mas não define como ela é executada. 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 {return-type método-nome1 (lista de parâmetros); return-type method-name2 (lista de parâmetros); tipo final-varname1 = valor; tipo final-varname2 = valor; // ... return-type nome-do-métodoN (lista-de-parâmetros); tipo final-varnameN = valor; } 

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

Nós não temos o conceito de “Interface” em C ++. Mas Java e C # definem a interface muito bem.

Interface em Java:

  • 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 de 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 qualquer construtor dentro da interface, pois a finalidade principal do construtor é a inicialização de variáveis ​​de classe, mas, nas variáveis ​​de interface, 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 uma palavra-chave "implementa" e a classe implementa todo o método declarado por uma interface herdada.

Interface em C #:

Interface em C # são quase semelhantes à interface em Java, exceto:

  • Interface em C # não declara variáveis.
  • O nome da interface é prefixado com um 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 {// class-body} 

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 da 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, ela também deve ser declarada como abstrata. O atributo abstrato é 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 {resumo method_name1 (); abstract method_name2 (); : return_type method_name3 (parameter_list) {// método concreto} return_type method_name4 (parameter_list) {// método concreto}}; 

O conceito de uma classe abstrata é semelhante em Java e C #. Uma classe abstrata é ligeiramente 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 “abstract”, a palavra-chave “virtual” é usada para declarar um método abstrato.

Principais diferenças entre a interface e a classe abstrata em Java & C #

  1. Quando você tem o conhecimento de "o que é necessário", mas não de "como seria implementado", então a interface deve ser usada. Por outro lado, se você sabe o que é requerido e parcialmente sabe como ele seria implementado, use uma classe abstrata.
  2. Uma interface tem todos os seus métodos abstratos, mas uma classe abstrata possui alguns métodos abstratos e alguns métodos 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 são restritos a serem públicos e abstratos apenas.
  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, sejam elas declaradas ou não, ao passo que não existe tal restrição para as variáveis ​​de uma classe abstrata ser apenas pública e final.
  6. Variáveis ​​em uma interface nunca podem ser privadas protegidas transitórias ou voláteis, ao passo que não há restrição para 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 o construtor dentro de uma interface, ao passo que você pode definir o construtor dentro de uma classe abstrata.

Conclusão:

Quando você precisa criar uma classe base que contenha uma forma generalizada de métodos que podem ser implementados pelas classes derivadas de acordo com sua necessidade, o conceito de interface e classe abstrata ajuda a fazê-lo.

Top