Qual a diferença entre criar uma classe abstrata ou uma interface? Todos os métodos não vão ter de ser sobrescritos?
Interface vs Abstract
6 Respostas
Uma interface pode ter só métodos abstratos e constantes. Uma classe abstrata pode ter métodos abstratos ou não, constantes e variáveis, a única exigência para uma classe abstrata é que ela contenha ao menos 1 método abstrato
Uma interface só define um contrato que uma classe deve seguir. Por exemplo, a interface List define os métodos que uma lista tem que ter, portanto, toda implementação de uma lista (ArrayList, LinkedList, …) tem que obedecer o contrato definido pela interface List.
Uma classe abstrata é quando você quer que uma classe defina vários comportamentos, mas não possa ser instanciada diretamente. No caso de List, existe uma implementação abstrata chamada AbstractList, que implementa vários comportamentos comuns a um lista. O ponto aqui é que AbstractList não pode ser instanciada diretamente, só serve como base para que outras herdem seus comportamentos.
(Se você observar o fonte de ArrayList, vai ver que ele estende AbstractList e não implementa List - pelo menos não diretamente)
Acho que o colega se enganou nesse ponto. Essa restrição que ele citou não acontece. Talvez tenha confundido com o fato de que a presença de algum método abstrato em uma classe, forçe que esta classe seja também abstrata.
Acho que o colega se enganou nesse ponto. Essa restrição que ele citou não acontece. Talvez tenha confundido com o fato de que a presença de algum método abstrato em uma classe, forçe que esta classe seja também abstrata.
Corretíssimo Mantu… Realmente me equivoquei… Obrigado pela correção
Uma interface só define um contrato que uma classe deve seguir. Por exemplo, a interface List define os métodos que uma lista tem que ter, portanto, toda implementação de uma lista (ArrayList, LinkedList, …) tem que obedecer o contrato definido pela interface List.
Uma classe abstrata é quando você quer que uma classe defina vários comportamentos, mas não possa ser instanciada diretamente. No caso de List, existe uma implementação abstrata chamada AbstractList, que implementa vários comportamentos comuns a um lista. O ponto aqui é que AbstractList não pode ser instanciada diretamente, só serve como base para que outras herdem seus comportamentos.
(Se você observar o fonte de ArrayList, vai ver que ele estende AbstractList e não implementa List - pelo menos não diretamente)
Clap Clap Clap!
Gostei mesmo. Até hoje eu pensava muitas coisas sobre interface e classe abstrata… Achava que tinha alguma coisa aver com padrão de projeto, sei la…
Esse assunto ainda é um pouco estranho à mim.
Gostei também da explicação.
Mas aplicar abstract e interface não é para qualquer coisinha
Vejam só este tópico falando de Interface.
É muito bom
http://www.guj.com.br/article.show.logic?id=123