Diferença entre Interface e Classe Abstrata em Java

Diferença chave: Interface ou protocolo é uma maneira comum que permite que objetos não relacionados se comuniquem uns com os outros. Representa um comportamento acordado que facilita a interação entre os dois objetos. Uma classe abstrata é uma classe de objetos que não podem ser instanciados ou configurados como uma instância de um objeto. Essa classe pode não ter nenhuma implementação ou pode ter uma implementação incompleta.

Java, C ++, C # são todas linguagens de programação complicadas que exigem um estudo detalhado e compreensão para poder trabalhar com. Há muitos métodos diferentes usados ​​nesses idiomas que decidem como o idioma funcionará. Interface e Abstract Class são dois conceitos confusos que fazem parte da OOP (programação orientada a objetos). Estes dois podem ser usados ​​individualmente ou em conjunto uns com os outros. Estes dois são completamente diferentes uns dos outros e são usados ​​em diferentes casos.

Java é uma linguagem de programação, que foi influenciada pela linguagem C. Ele deriva muito da sua sintaxe de C e C ++, no entanto, tem menos facilidades de baixo nível do que qualquer um. Java é uma linguagem de programação de uso geral projetada para ter menos dependências de implementação em comparação com os idiomas anteriores. É uma linguagem concorrente, baseada em classes e orientada a objetos.

Java foi desenvolvido por James Gosling na Sun Microsystems e foi lançado em 1995. Foi originalmente lançado como um componente central da plataforma Java da Sun Microsystems. A Sun já re-licenciou a maioria de suas tecnologias Java sob a Licença Pública Geral GNU. Isso significa que toda a tecnologia licenciada sob a GNU General Public License é de código aberto e geralmente está disponível gratuitamente. A Sun Microsystems acabou se fundindo à Oracle Corporation. A partir de 2012, o Java tornou-se uma das linguagens de programação mais populares para uso. Isso é especialmente verdadeiro para aplicativos da Web cliente-servidor. Muitos outros sistemas desenvolveram implementações alternativas das tecnologias da Sun, como o GNU Compiler for Java e o GNU Classpath.

Interface ou protocolo é uma maneira comum que permite que objetos não relacionados se comuniquem uns com os outros. Representa um comportamento acordado que facilita a interação entre os dois objetos. A interface contém a chave para as várias ações sendo implementadas e serve como um link entre os dois objetos diferentes. Se uma classe de objetos é exposta à interface, a classe teria que seguir o comportamento implementado pela interface. Comumente, as interfaces contêm apenas declarações constantes e assinaturas de métodos. Qualquer interface que implemente uma interface específica, deve aplicar todos os métodos mencionados na interface ou ser declarada como uma classe abstrata. Em Java, qualquer objeto pode ser definido como uma interface, se esse objeto é nulo ou contém uma classe na qual implementa essa interface específica. Pode-se implementar múltiplas interfaces para uma única classe em Java usando palavras-chave implementadas.

Uma classe abstrata é uma classe de objetos que não podem ser instanciados ou configurados como uma instância de um objeto. Essa classe pode não ter nenhuma implementação ou pode ter uma implementação incompleta. Ele também pode ter métodos abstratos ou propriedades que são compartilhadas por todas as subclasses. Em algumas linguagens de programação, tipos abstratos sem implementação são conhecidos como interfaces. Em Java, um tipo abstrato pode ser criado usando a palavra-chave 'abstract' na definição da classe. O objetivo de ter uma classe abstrata para colocar todos os métodos que não estão implementados na classe abstrata e deixá-la para a subclasse para determinar como implementar essas classes. Se uma classe tiver um único método abstrato, a classe deve ser declarada como uma classe abstrata, embora não seja necessário ter pelo menos um método único para declarar um resumo de classe.

Malliktalksjava.in lista as principais diferenças entre interface e resumo como:

  • A classe abstrata tem o construtor, mas a interface não.
  • Classes abstratas podem ter implementações para alguns de seus membros (Methods), mas a interface não pode ter implementação para nenhum de seus membros.
  • Classes abstratas devem ter subclasses que serão inúteis.
  • Interfaces devem ter implementações por outras classes que serão inúteis
  • Apenas uma interface pode estender outra interface, mas qualquer classe pode estender uma classe abstrata.
  • Todas as variáveis ​​nas interfaces são finais por padrão
  • Interfaces fornecem uma forma de herança múltipla. Uma classe pode estender apenas uma outra classe.
  • Interfaces são limitadas a métodos públicos e constantes sem implementação. Classes abstratas podem ter uma implementação parcial, partes protegidas, métodos estáticos, etc.
  • Uma classe pode implementar várias interfaces. Mas no caso da classe abstrata, uma classe pode estender apenas uma classe abstrata.
  • Interfaces são lentas, uma vez que requer uma indireção extra para encontrar o método correspondente na classe real. Classes abstratas são rápidas.
  • O modificador de acessibilidade (Público / Privado / interno) é permitido para a classe abstrata. Interface não permite modificador de acessibilidade
  • Uma classe abstrata pode conter métodos completos ou incompletos. Interfaces podem conter apenas a assinatura de um método, mas nenhum corpo. Assim, uma classe abstrata pode implementar métodos, mas uma interface não pode implementar métodos.
  • Uma classe abstrata pode conter campos, construtores ou destruidores e implementar propriedades. Uma interface não pode conter campos, construtores ou destruidores e tem apenas a assinatura da propriedade, mas não a implementação.
  • Vários modificadores de acesso, como abstrato, protegido, interno, público, virtual, etc., são úteis em Classes abstratas, mas não em interfaces.
  • Escopo abstrato é até classe derivada.
  • O escopo da interface é de qualquer nível de sua cadeia de herança.

As informações para a tabela são cortesia de codeproject.com e mindprod.com

Interface

Classe abstrata

Herança múltipla

Uma classe pode herdar várias interfaces.

Uma classe pode herdar apenas uma classe abstrata.

Implementação Padrão

Uma interface não pode fornecer nenhum código, apenas a assinatura.

Uma classe abstrata pode fornecer código padrão completo e / ou apenas os detalhes que devem ser substituídos.

Modificadores de Acesso

Uma interface não pode ter modificadores de acesso para subs, funções, propriedades, etc., tudo é assumido como público.

Uma classe abstrata pode conter modificadores de acesso para subs, funções e propriedades.

Núcleo vs. Periférico

Interfaces são usadas para definir as habilidades periféricas de uma classe. Em outras palavras, tanto Humano quanto Veículo podem herdar de uma interface IMovável.

Uma classe abstrata define a identidade central de uma classe e lá é usada para objetos do mesmo tipo.

Homogeneidade

Se várias implementações apenas compartilharem assinaturas de métodos, é melhor usar Interfaces.

Se várias implementações forem do mesmo tipo e usarem comportamento ou status comuns, é melhor usar a classe abstrata.

Rapidez

Requer mais tempo para encontrar o método real nas classes correspondentes.

Rápido

Adicionando funcionalidade

Se adicionarmos um novo método a uma interface, temos que rastrear todas as implementações da interface e definir a implementação do novo método.

Se adicionarmos um novo método a uma classe abstrata, temos a opção de fornecer implementação padrão e, portanto, todo o código existente pode funcionar corretamente.

Campos e Constantes

Nenhum campo pode ser definido em interfaces.

Uma classe abstrata pode ter campos e constantes definidos.

Intensidade

As declarações constantes em uma interface são todas presumidas public static final.

Código compartilhado pode ser adicionado em uma classe abstrata.

Constantes

Apenas constantes finais estáticas, podem usá-las sem qualificação em classes que implementam a interface.

Ambas as instâncias e constantes estáticas são possíveis. Ambos estático e código de iniciador de instância também são possíveis para calcular as constantes.

Conveniência de terceiros

Uma implementação de interface pode ser adicionada a qualquer classe de terceiros existente.

Uma classe de terceiros deve ser reescrita para estender somente da classe abstrata.

é-um vs. -able ou pode-fazer

Interfaces são freqüentemente usadas para descrever as habilidades periféricas de uma classe, não sua identidade central, por exemplo, uma classe Automobile pode implementar a interface Recyclable, que poderia se aplicar a muitos objetos totalmente não relacionados.

Uma classe abstrata define a identidade central de seus descendentes. As interfaces implementadas enumeram as coisas gerais que uma classe pode fazer, não as coisas que uma classe é.

Em um contexto Java, os usuários normalmente devem implementar a interface Runnable em vez de estender o Thread, porque eles não estão realmente interessados ​​em fornecer alguma nova funcionalidade Thread, eles normalmente só querem que algum código tenha a capacidade de executar independentemente. Eles querem criar algo que possa ser executado em um thread, não um novo tipo de thread. O semelhante é-um vs. tem-um debate surge quando você decide herdar ou delegar.

Plugar

O usuário pode gravar um novo módulo de substituição para uma interface que contenha não um código de barras em comum com as implementações existentes. Quando o usuário implementa a interface, eles começam do zero sem nenhuma implementação padrão. O usuário tem que obter ferramentas de outras classes; nada vem com a interface além de algumas constantes. Isso dá ao usuário liberdade para implementar um design interno radicalmente diferente.

O usuário deve usar a classe abstrata como é para a base de código, com toda a sua bagagem de acompanhante, boa ou ruim. O autor da classe abstrata impôs estrutura ao usuário.

Manutenção

Se o código do cliente fala apenas em termos de uma interface, você pode facilmente alterar a implementação concreta por trás dele, usando um método de fábrica.

Se o código do cliente fala apenas em termos de uma classe abstrata, você pode facilmente alterar a implementação concreta por trás dele, usando um método de fábrica.

Recomendado

Artigos Relacionados

  • diferença entre: Diferença entre adesão e coesão

    Diferença entre adesão e coesão

    Diferença chave: Em termos de química e física, a adesão é a tendência de partículas ou superfícies diferentes de se unirem umas às outras. Coesão é a tendência de moléculas semelhantes ou idênticas se agarrarem umas às outras. Adesivo e coesivo são duas palavras que soam muito semelhantes por causa do 'sive' nas extremidades, porém elas são completamente diferentes umas das outras. Eles são derivad
  • diferença entre: Diferença entre o HTC One X + e o HTC First

    Diferença entre o HTC One X + e o HTC First

    Diferença chave: O HTC One X + possui uma tela sensível ao toque super LCD de 4, 7 polegadas com aproximadamente 312 ppi de densidade de pixels, o que significa que a tela é bastante impressionante e não apresenta pixels. O dispositivo é alimentado pelo processo Quad-core NVIDIA Tegra 3 de 1, 7 GHz, tornando-o mais rápido que o HTC One X original. O HT
  • diferença entre: Diferença entre ronco e apneia do sono

    Diferença entre ronco e apneia do sono

    Diferença chave : O ronco é o som rouco causado pela obstrução parcial da respiração durante o sono, enquanto a "apnéia do sono" é causada pela parada temporária ou suspensão da respiração por alguns segundos devido à completa obstrução da passagem do ar. O ronco é um som anormal, enquanto a apnéia é um distúrbio do sono. Ronco é o som que
  • diferença entre: Diferença entre rotina e teste de urina de cultura

    Diferença entre rotina e teste de urina de cultura

    Diferença chave: O Teste de Urina de rotina é uma série de testes realizados na urina e pode ser realizado para indicar a presença de uma doença ou condição. Teste de urina de cultura é um tipo de teste realizado para diagnosticar uma infecção do trato urinário, bem como para isolar e identificar as bactérias ou fungos responsáveis. A urina é b
  • diferença entre: Diferença entre cortinas e cortinas

    Diferença entre cortinas e cortinas

    Diferença chave: As cortinas referem-se a tratamentos pesados ​​de janelas que geralmente são revestidas com um tecido extra. Cortinas são tratamentos de janela que são leves e finos, embora também possam ser espessos. Estes são geralmente um único pedaço de tecido e não são revestidos com qualquer material adicional. Cortinas e c
  • diferença entre: Diferença entre necessidade e necessidade

    Diferença entre necessidade e necessidade

    Diferença chave: Uma necessidade é qualquer coisa que seja essencial para a sobrevivência. Tudo o mais que a necessidade se enquadra na categoria de desejo que não é essencial para a sobrevivência básica, mas geralmente é necessária para o cumprimento dos desejos. Necessidade e desejo são diferentes umas das outras. Uma nece
  • diferença entre: Diferença entre DSP e Microcontrolador

    Diferença entre DSP e Microcontrolador

    Diferença chave: DSP significa processamento de sinal digital. É basicamente qualquer processamento de sinal que é feito em um sinal digital ou sinal de informação. Um processador DSP tem como objetivo modificar ou melhorar o sinal. Um microcontrolador, por outro lado, é um pequeno computador em um único circuito integrado contendo um núcleo de processador, memória e periféricos de entrada / saída programáveis. O microcon
  • diferença entre: Diferença entre o Ebola e a AIDS

    Diferença entre o Ebola e a AIDS

    Diferença chave: A principal diferença AIDS e Ebola é o fato de que uma pessoa que foi infectada com o HIV pode viver por mais de 10 anos sem ter AIDS. No entanto, uma pessoa infectada pelo Ebola começará a apresentar sintomas dentro de 2 a 21 dias. Ebola e AIDS são duas doenças diferentes que podem atacar seres humanos. O Ebo
  • diferença entre: Diferença entre HTC Butterfly e LG Optimus G

    Diferença entre HTC Butterfly e LG Optimus G

    Diferença chave: O HTC Butterfly é um telefone topo de gama da HTC Corporation. O HTC Butterfly é vendido em quatro variantes: DNA Droid; J Borboleta HTL21; Borboleta X920d; e borboleta X920e. Eles são todos alimentados em um processador Krait de 1, 5 GHz de núcleo quádruplo. O HTC Droid possui o MDM615m Quadcomm, enquanto as variantes Butterfly possuem o chipset Qualcomm APQ8064. Todo

Escolha Do Editor

Diferença entre Passivo e Ativo

Diferença chave: Passivo e ativo são duas palavras diferentes com significados diferentes. Passivo é usado para descrever alguém que permite que as coisas aconteçam sem tentar mudar nada. Considerando que, ativo descreve uma pessoa, que se envolve em ação ou participação. As palavras passivas e ativas são totalmente diferentes umas das outras. Passivo