Você está aqui: Java ::: Perguntas e Respostas ::: Programação Orientada a Objetos |
Qual a diferença entre classe abstrata e interface em JavaQuantidade 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)); |
![]() |
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 |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |