Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Diferença entre classe abstrata e interface

Bom Dia

Qual a diferença entre a utilização de uma classe abstrata e interface? Entendi que ambas obrigam as classes que estendem delas a implementar determinados métodos mas quando usar uma ou outra?

2 respostas
solução!

Olá Claudia, tudo bem com você?

Vou repassar algumas regras gerais de como as duas se comportam:

Interface

1. Suporta Herança Múltipla: Uma classe pode implementar múltiplas interfaces;

2. Permite apenas métodos abstratos: Nenhum método com implementação. Temos algumas exceções que chegaram com o Java 8, mas essa é a ideia principal;

3. Não contém atributos: Essa é outra regra que possui uma exceção. Enquanto é comum ouvirmos que interfaces não guardam o estado da classe por não suportarem a instância de atributos, elas ainda podem conter atributos constantes de classe (public static final);

4. Não contém construtor

5. Quando utilizar? O ideal é utilizar a interface quando várias classes diferentes compartilham apenas a assinatura de seus métodos. Em outras palavras, podemos ter várias classes sem qualquer relação entre si, mas se elas compartilharem as funcionalidades oferecidas pela interface que estamos criando, então faz total sentido que essas classes a implementem. Conclusão: interfaces estão aí para ditar o que uma classe deve fazer, ajudando a definir quais habilidades as classes que assinarem esse "contrato" devem possuir.

Classe abstrata

1. Não suporta Herança Múltipla

2. Pode conter métodos concretos ou abstratos: Isso quer dizer que todos os métodos de uma classe abstrata podem ser tanto concretos como, também, todos podem ser abstratos;

3. Pode conter atributos de todos os tipos

4. Contém construtor

5. Quando utilizar? Diferente da interface que pode estar envolvida com diversas classes sem qualquer relação entre si, uma classe abstrata continua sendo uma classe. E sabemos que quando uma classe X herda de uma classe Y é o mesmo que dizer que X é um Y. Ou seja, quando queremos criar várias classes que irão compartilhar um mesmo comportamento, uma classe abstrata é o componente ideal para ser a base para criação de todas elas, servindo como um molde para as futuras classes que irão derivar dela. Conclusão: classes abstratas definem a identidade de suas classes derivadas ditando o que e como uma classe deve se comportar, o que aumenta o acoplamento entre classes, porém faz total sentido em algumas situações.

No geral, esses são os pontos que eu considero mais importantes a serem lembrados. Existem muito mais detalhes relacionados à forma correta de se utilizar esses dois componentes, mas praticando e lendo o código de devs mais experientes, acredito que tudo ficará mais fácil com o tempo. Se tiver alguma dúvida é só avisar! ;)

Abraços e bons estudos!!

Obrigada