Ofereço ajuda em Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD
+55 (062) 98553-6711
Ofereço ajuda em PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO
+55 (062) 98243-1195

Você está aqui: Java ::: Perguntas e Respostas ::: Programação Orientada a Objetos

Qual a diferença entre classe abstrata e interface em Java

Quantidade de visualizações: 796 vezes
Esta é uma pergunta clássica feita pelos estudantes de programação orientada a objetos em Java, e merece uma discussão mais aprofundada, com exemplos.

Vamos começar então.

1) Uma classe abstrata pode possuir variáveis de instância, enquanto uma interface não pode conter variáveis de instância. Veja:

package arquivodecodigos;

public interface Boleto{
  public int codigo = 65;
}

Este código compila normalmente, mas, dentro da IDE, temos uma advertência do tipo "O nome da constante não segue as convenções de nome codigo". O que é isso? Este warning diz que devemos trocar a variável de instância por uma constante. Veja:

package arquivodecodigos;

public interface Boleto{
  public final int CODIGO = 65;
}

Agora a advertência some, ou seja, uma interface pode possuir constantes, mas não pode possuir variáveis de instância. E isso fazer sentido. Como não é possível usar new para construir uma instância de uma interface, não há vantagem nenhuma em definirmos variáveis de instância nas mesmas.

2) Uma classe abstrata pode possuir um construtor, enquanto uma interface não pode conter métodos construtores. Veja:

package arquivodecodigos;

public interface Boleto{
  // construtor da interface
  public Boleto(){
    
  }
}

Este código não compila, e temos duas mensagens de erro de compilação: "invalid method declaration: return type required" e "interface abstract methods cannot have body". Novamente isso faz sentido. Como não podemos usar new para construir um objeto de uma interface, não há porque ela possuir métodos construtores.

3) Uma classe abstrata pode conter métodos implementados com corpo (método não abstratos), enquanto uma interface pode conter somente métodos abstratos (sem corpo). Veja:

package arquivodecodigos;

public interface Boleto{
  public int somar(){
    return 10;
  }
}

Este código não compila, e temos a mensagem de erro de compilação "interface abstract methods cannot have body". Para corrigir, basta retirarmos o corpo do método:

package arquivodecodigos;

public interface Boleto{
  public int somar();
}

Agora o código compila normalmente, uma vez que o objetivo da interface é delegar a funcionalidade de seus métodos às classes que optarem por implementá-las (implements). Mas, tenha em mente que, a partir do Java 1.8, uma interface pode ter métodos estáticos. Veja:

package arquivodecodigos;

public interface Boleto{
  public static int somar(int a, int b){
    return a + b;
  }
}

// exemplo de chamada a partir de outra classe
System.out.println("Soma: " + Boleto.somar(23, 12));


Link para compartilhar na Internet ou com seus amigos:

Desafios, Exercícios e Algoritmos Resolvidos de Java

Veja mais Dicas e truques de Java

Dicas e truques de outras linguagens

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 27 usuários muito felizes estudando em nosso site.