Vídeo: Aula de Java 032 - abstract, classes abstratas 2024
Ambas as interfaces e as classes abstratas possuem métodos abstratos em Java. Mas os métodos abstratos desempenham papéis ligeiramente diferentes nesses dois tipos de tipos de referência. Como você pode manter tudo em linha reta em sua mente?
A primeira coisa a fazer é lembrar que ninguém aprende sobre conceitos de programação orientados a objetos sem ter muita prática em escrever código. Se você estiver confuso, isso pode ser uma coisa boa. Isso significa que você entendeu o suficiente para saber o quanto isso é complicado. Quanto mais você escrever, mais confortável você se tornará com classes, interfaces e todas essas outras idéias.
A próxima coisa a fazer é resolver as diferenças na maneira como você declara métodos abstratos. Aqui está a história.
Em uma classe ordinária (não abstrata) | Em uma interface | Em uma classe abstrata | |
Os métodos abstratos são permitidos? | Não | Sim | Sim |
Pode uma declaração de método conter a palavra-chave resumo ? | Não | Sim | Sim |
Pode uma declaração de método conter a palavra-chave padrão (que significa "não resumo")? | Não | Sim | Não |
Com nem o resumo nem o padrão | Não resumo | Resumo | Não resumo |
Tanto as interfaces como as classes abstratas possuem métodos abstratos. Então, você pode estar se perguntando como você deve escolher entre declarar uma interface e declarar uma classe abstrata. Na verdade, você pode pedir a três programadores profissionais como interfaces e aulas abstratas diferem entre si. Se você fizer isso, você pode obter cinco respostas diferentes. (Sim, cinco respostas, e não três respostas.)
As interfaces e as classes abstratas são bestas semelhantes e os novos recursos no Java 8 tornaram-nos ainda mais parecidos do que nas versões anteriores de Java. Mas a idéia básica é sobre as relações entre as coisas.
- A extensão de uma subclasse representa um é uma relação.
- Implementar uma interface representa uma relação pode fazer.
Se você quer evidências mais tangíveis da diferença entre uma interface e uma classe abstrata, considere isso: uma classe pode implementar muitas interfaces, mas uma classe pode estender apenas uma outra classe, mesmo que essa classe seja uma classe abstrata. Então, depois de ter declarado a classe pública
, Dog extends HousePet
, você também não pode fazer
Dog
estender uma classe
Friend
. Mas você pode fazer
Dog
implementar uma interface
Befriendable
. E então você pode fazer a mesma
Dog
implementar uma interface
Trainable
.
E, se você quer uma diferença tangível mais entre uma interface e uma classe abstrata, aqui está uma para você: uma interface não pode conter campos não estáticos e não finais.
Então, lá. Interfaces e classes abstratas são diferentes um do outro. Mas se você é novo no jogo, não se preocupe com a diferença. Basta ler o código que puder, e não fique assustado quando vê um método abstrato. Isso é tudo aí.