Dúvida uso de Herança e Interface [Resolvido]

Olá galera!
Como esse é meu primeiro post eu vou aproveitar pra me apresentar, meu nome é Luke, venho a algum tempo me interessando por linguagens de programação, mas nunca tive oportunidades/motivações para começar a estudar. Umas semanas atras eu comecei a estudar java por motivação da minha namorada que é formada em TI.
Como todo mundo que está aprendendo alguma coisa nova, sempre surgem dúvidas, e a minha vem a seguir.

A dúvida

Bom, eu estava estudando herança, aprendi bem, até que comecei a estudar interfaces e isso meio que me confundiu bastante na hora de usar, quais as vantagens e desvantagens e eu queria ver se vocês podiam me ajudar.

As opções

Bom, eu fiz um código bem simples, uma com a herança e outra com a interface respectivamente, as duas com o mesmo objetivo.

Os códigos

Então, primeiro o código com herança com o intuito de imprimir o tipo e o modelo do veículo:

[code]public class Veiculo {
protected String tipo;
protected String modelo;

public String getTipo() {
	System.out.println("Tipo " + tipo);
	return tipo;
}

public String getModelo() {
	System.out.println("Modelo " + modelo);
	return modelo;
}

}

public class Carro extends Veiculo {

public void setTipo(String tipo) {
	this.tipo = tipo;
}

public void setModelo(String modelo) {
	this.modelo = modelo;
}

}

public class Teste {
public static void main(String[] args) {
Carro carro = new Carro();

	carro.setTipo("Carro.");
	carro.setModelo("Sedan 2010.");
	carro.getTipo();
	carro.getModelo();
}

}
[/code]
Agora o código com interface, seguindo o mesmo intuito de imprimir o tipo e o modelo do veículo:

[code]public interface Veiculo {
public String getTipo(String tipo);
public String getModelo(String modelo);
}

public class Carro implements Veiculo {
public String tipo;
public String modelo;

public String getTipo(String tipo) {
	System.out.println("Tipo " + tipo);
	return tipo;
}

public String getModelo(String modelo) {
	System.out.println("Modelo " + modelo);
	return modelo;
}

}

public class Teste {
public static void main(String[] args) {
Veiculo carro = new Carro();

	carro.getTipo("Carro.");
	carro.getModelo("Sedan 2010.");
}

}
[/code]

Como aprendi recentemente, não sei muito bem se está certo ou errado, se poderia estar mais simples ou complexo. Por favor sejam pacientes pois sou novato :smiley:
Se puderem me ajudar, me disser qual o melhor a usar, se tem como deixar mais flexível, mais simples, eu ficaria grato demais :stuck_out_tongue:

Agradeço desde já a atenção de vocês, até mais!

Então, o detalhe é sutil, mas importante. Só deve ser usado herança (na minha opinião) aonde faz sentido.

Eu respondi um tópico falando um pouquinho sobre isso, se quiser, dê uma lida.

Se tiver dúvidas quanto à diferença depois de ler, avise que a gente tenta explicar melhor :slight_smile:

Hm, me esclareceu bastante com um exemplo bem simples(pois li vários complexos e meio difíceis de entender). Mas aí surgiu outra dúvida, eu poderia tranquilamente herdar o método de uma public class Quicavel, invés de uma public interface? Pois tecnicamente a bola é quicavel, mesma coisa o pneu, não é? :smiley:

depende do que você quer dizer com poderia.

Se você quer saber se compilaria, então sim, você poderia.

Mas o ponto importante é que não parece ser correto. pois Quicavel não é um objeto, é uma qualidade, um comportamento. Um comportamento que bolas e pneus possuem. Sendo esses dois os objetos verdadeiros.

Deu pra entender a diferença? É conceitual mesmo, na prática se você quiser criar a classe Quicavel pode criar sem problemas. Só que na minha opinião não faria muito sentido. :smiley:

aaaaaaaaaa ta, agora acho que entendi,

então tipo assim, se eu existisse uma classe, por exemplo [color=blue]Borracha[/color],
eu poderia herdar da [color=blue]Borracha[/color], e implementar os dois em
[color=blue]Quicavel[/color], pois nem tudo que é de borracha quica.

é isso?

É isso aí :smiley:

Essa é a ideia.

ah bom, entendi.

muito obrigado cara, ajudou muito :smiley: