nterface vs classe abstrata em Java: Qual é a diferença?

O que é interface?

A interface é um projeto que pode ser usado para implementar uma classe. A interface não contém nenhum método concreto (métodos que possuem código). Todos os métodos de uma interface são métodos abstratos.

Uma interface não pode ser instanciada. No entanto, as classes que implementam interfaces podem ser instanciadas. As interfaces nunca contêm variáveis ​​de instância, mas podem conter variáveis ​​finais públicas estáticas (ou seja, variáveis ​​de classe constantes)

O que é classe abstrata?

Uma classe que possui a palavra-chave abstract em sua declaração é chamada de classe abstrata. As classes abstratas devem ter pelo menos um método abstrato. , isto é, métodos sem corpo. Ele pode ter vários métodos concretos.

As classes abstratas permitem que você crie projetos para classes concretas. Mas a classe herdada deve implementar o método abstrato.

Classes abstratas não podem ser instanciadas.

Razões importantes para usar interfaces

  • As interfaces são usadas para obter abstração.
  • Projetado para suportar resolução de método dinâmico em tempo de execução
  • Ajuda a obter um acoplamento fraco.
  • Permite que você separe a definição de um método da hierarquia de herança

Razões importantes para usar a classe abstrata

  • As classes abstratas oferecem funcionalidade padrão para as subclasses.
  • Fornece um modelo para futuras classes específicas
  • Ajuda a definir uma interface comum para suas subclasses
  • A classe abstrata permite a reutilização do código.

Interface vs. Classe Abstrata

Uma classe abstrata permite que você crie uma funcionalidade que as subclasses podem implementar ou substituir, enquanto uma interface permite apenas que você declare a funcionalidade, mas não a implementa. Uma classe pode estender apenas uma classe abstrata, enquanto uma classe pode implementar várias interfaces.

Parâmetros Interface Aula abstrata
VelocidadeLentoRápido
Múltiplas HerançasImplementar várias interfacesApenas uma classe abstrata
EstruturaMétodos abstratosMétodos abstratos e concretos
Quando usarMelhoria futuraPara evitar a independência
Herança / ImplementaçãoUma classe pode implementar várias interfacesA classe pode herdar apenas uma classe abstrata
Implementação PadrãoAo adicionar coisas novas à interface, é um pesadelo encontrar todos os implementadores e implementar coisas recém-definidas.No caso da Classe Abstrata, você pode aproveitar as vantagens da implementação padrão.
Modificadores de acessoA interface não possui modificadores de acesso. Tudo definido dentro da interface é assumido como modificador público.A classe abstrata pode ter um modificador de acesso.
Quando usarÉ melhor usar a interface quando várias implementações compartilham apenas a assinatura do método. Hierarquia polimórfica de tipos de valor.Deve ser usado quando várias implementações do mesmo tipo compartilham um comportamento comum.
Campos de dadosa interface não pode conter campos de dados.a classe pode ter campos de dados.
Padrão de herança múltiplaUma classe pode implementar várias interfaces.Uma classe herda apenas uma classe abstrata.
ImplementaçãoUma interface é abstrata, de modo que não pode fornecer nenhum código.Uma classe abstrata pode fornecer um código padrão completo que deve ser substituído.
Uso de modificadores de acessoVocê não pode usar modificadores de acesso para o método, propriedades, etc.Você pode usar uma classe abstrata que contém modificadores de acesso.
UsoAs interfaces ajudam a definir as habilidades periféricas de uma classe.Uma classe abstrata define a identidade de uma classe.
Campos definidosNenhum campo pode ser definidoUma classe abstrata permite que você defina campos e constantes
HerançaUma interface pode herdar várias interfaces, mas não pode herdar uma classe.Uma classe abstrata pode herdar uma classe e várias interfaces.
Construtor ou destruidoresUma interface não pode declarar construtores ou destruidores.Uma classe abstrata pode declarar construtores e destruidores.
Limite de extensõesEle pode estender qualquer número de interfaces.Ele pode estender apenas uma classe ou uma classe abstrata por vez.
Palavra-chave abstrataEm uma palavra-chave de interface abstrata, é opcional para declarar um método como abstrato.Em uma classe abstrata, a palavra-chave abstract é obrigatória para declarar um método como abstrato.
Tipo de aulaUma interface pode ter apenas métodos abstratos públicos.Uma classe abstrata possui métodos abstratos protegidos e públicos.

Código de amostra para Interface e classe abstrata em Java

A seguir está um código de amostra para criar uma interface e classe abstrata em Java

Sintaxe da interface

 interface name{ //methods }

Exemplo de interface Java:

 interface Pet { public void test(); } class Dog implements Pet { public void test() { System.out.println('Interface Method Implemented'); } public static void main(String args[]) { Pet p = new Dog(); p.test(); } } 

Sintaxe de classe abstrata

abstract class name{ // code }

Exemplo de classe abstrata:

 abstract class Shape { int b = 20; abstract public void calculateArea(); } public class Rectangle extends Shape { public static void main(String args[]) { Rectangle obj = new Rectangle(); obj.b = 200; obj.calculateArea(); } public void calculateArea() { System.out.println('Area is ' + (obj.b * obj.b)); } }