Interface x Herança

Galera, estou estudando a parte de Heranças x Interface pela apostila da Caelum. Mas estou com uma grande dúvida, quais as principais diferenças entre usar uma SuperClass e uma Interface??? Quais as vantagens e desvantagens entre cada uma delas?? Quando usar Interface e quando usar Herança??? Ficarei muito agradecido se alguém me ajudar!!!

Obrigado desde já!!!

:roll:

Isso já foi beeem discutido por aqui:
http://www.guj.com.br/posts/list/51866.java#273117

1 curtida

Uma interface é como uma classe 100% abstrata. Uma interface é como um conjunto de regras (contrato) definidas e que devem ser rigorosamente seguidas (implementadas).
A herança possibilita o reaproveitamento de código, onde cada subclasse herda as características da super classe.

OK, valeu pela ajuda!!!

Assim so para facilitar… sempre no inicio dos estudo tente associar, a teoria de OO com o mundo real(até pq é isso que “acontece”) uma interface é algo abstrato tipo veiculo, o que é um veiculo? um carro é-um veiculo, caminhão é-um veiculo, onibus etc.
Então podemos dizer que eu tenho uma interface veiculo certo? Ai vc agora vai desenvolver um sistema para uma industria de automoveis, que fabrica carro, onibus etc… então como vc um bom programador de OO, nao faz querer para cada linha de produção de engenheria ter um modulo especifico na hora de montar o veiculo ne? Então vc faz o seguinte: Cria uma interface Veiculo com os atributos abaixo:

interface Veiculo{
void cor();
void numPortas(int z);
void dataFabricacao();
}

qualquer veiculo que vc produzir vai ter essas caracteristas… nao importa se é um onibus, um caminhao etc… ele vai ter uma cor, o numero de portas e a data de fabricacao certo?
Então vc nao vai querer fazer para cada departamento, o mesmo modulo varias vezes… ai vc cria essa interface… e apenas cada departamento de produção implementa essa interface e pronto olha como fica.

class DeptoCarro implements Veiculo{
/* aqui as implementacoes do metodo*/
}
class DeptoOnibus implements Veiculo{
/* aqui as implementacoes do metodo*/
}

percebeu a essencia de interfaces? vc programa uma unica vez… e nao vai precisar fazendo copie -cole no mesmo codigo… e quando mudar em um tem q sair mudando em outros locais… tb, é outro beneficio…
espero ter ajuado!
flw! qualquer duvida tamos ai :smiley:

Um bom exemplo de uso de interface que definem um contrato é a API de JDBC;
A API define o contrato, quem se preocupa com a implementação são os fornecedores dos drivers de BD.
Não importa p/ quem esta usando a API(que define o contrato), em que BD vc esta conectando, pq teoricamente quem implementou seguiu o contrato.

[]'s

embora há puristas OO que pregam o desuso de herança e o uso exclusivo de interfaces…

Legal galera, muito obrigado pela ajuda. Mas sem abusar da boa vontade, posso tirar mais uma dúvida?? Por exemplo, eu tenho a class abstrata Veiculos. implementadas a ela, tenho as classes Motos e Carros. Como, através de ARRAY, criar um carro[0], carro[1] se não posso definir a instancia veiculo na classe main??? Acho que deu para entender rsrs. Conto com a ajuda de vocês, obrigado novamente!!!

Podemos pensar dessa forma:

Imagine uma interface como padrões a serem seguidos.

Se você for um conzinheiro. E sua interface diz:

cortarVerduras
prepararMassa
refogarMolho

então você terá que fazer isso, porém o modo de como você for fazer é que irá lhe deferenciar de um conzinheiro A para o conzinheiro B.

Então em java a interface nada mais é do que um padrão a ser seguido pelas classes que forem implementá-lá, como a classe faz não importa, importa apenas se ela irá seguir aquele padrão.