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

Dúvida sobre Interface e Classes abstratas

Já pesquisei na internet, li diversas perguntas no StackOverFlow, artigos, mas ainda não consigo compreender bem a utilidade das interfaces. A classe abstrata eu entendi e faz sentido quando usamos herança, por não tem sentido criar uma classe genérica sendo que vamos sobrescrever os métodos da classe base.

Agora, vendo o lado das interfaces, qual o sentido de utilizar interface e herança em uma classe sendo que vamos ter que implementar o método abstrata da classe abstrata e a interface obriga você a fazer o mesmo? Programo em linguagens OO e por enquanto não consegui encontrar a necessidade de usar uma interface e nem classes abstratas. Qual o seu contexto de uso? Quando se faz necessário utilizar uma interface quando podemos usar uma classe abstrata e vice-versa? Essa parte da OO sempre me deixou confuso. Não entra na cabeça de jeito nenhum.

7 respostas

A primeira necessidade de utilizar as classes abstratas é para reduzir a repetição exaustiva de atributos e métodos. O que facilita e muito quando se necessita realizar uma alteração. Se imaginar projetos grandes com uma grande quantidade de atributos tendo que ser reescritos, fica mais fácil compreender a utilidade. Já a classe interface acredito que a sua utilização seja por uma questão de organização, fica mais fácil compreender que objetos diferentes possuem uma relação.

É muito difícil ver uma aplicação de interface. O exemplo da aula me deixou muito perdido por que uma classe herda de outra e ao mesmo tempo implementa uma interface. Na minha cabeça é uma confusão gigante.

A questão da classe abstrata é tranquilo... faz sentido utilizar e realmente consigo ver utilidade nesse cenário que você falou... mas interface é algo que não vejo utilidade em utilizar mesmo com ou sem herança.

Consegue bolar uma necessidade onde eu posso utilizar uma interface e uma classe que implementa essas interfaces?

Bom eu trabalhei com Java durante muito tempo, e no Java possui um componente chamado Jtable, que é uma tabela. Esse componente tem implementa a classe chamada DefaultTableModel, que absurdamente genérica é não lhe da controle o suficiente sobre o componente. A solução para esse componente é sobrescrever uma classe que acredito que seja interface chamada AbstractTableModel, em que você define as funções de acordo com a sua necessidade. Possivelmente o exemplo não é de fácil compreensão, mas a ideia acho que é essa...

Não é de fácil compreensão mesmo kk.. ta difícil.

solução!

Outro exemplo: suponha que sempre que você vai fazer um sistema do tipo CRUD você lembre de definir os métodos para inserir, exibir e deletar os registros. Mas constantemente esquece de implementar funções de realizar update. Se você estivesse implementando uma classe interface, muito provavelmente a IDE que você esta utilizando lhe daria dicas sobre os métodos que você deveria implementar, impedindo que você esqueça de implementar o update.

Hm... agora ficou mais claro. E por exemplo, faz sentido eu ter uma interface sem ter uma herança? É obrigatório ter uma herança e classes abstratas? Ou posso declarar uma interface e implementar os métodos nas classes que eu quiser?

Sim, você pode ter uma interface sem usar classe abstrata. Dentro da Alura tem curso que possui até exercício que faz isso.