compartilhem atributos e metodos, atraves de "herancas". Ela e usada na intencao de reaproveitar codigo ou comportamento generalizado ou especializar operacoes ou atributos. O conceito de heranca de varias classes e conhecido como heranca multipla.(Fonte Wikipedia). Neste exemplo iremos implementar uma classe pai(Veiculo) e duas classes filhas(Passeio e Transporte) e uma quarta que sera a que vai executar nossa implementacao.Entao temos:01) Veiculo.java02) Passeio.java03) Transporte.java04) UsandoVeiculo.java Aqui na primeira classe Veiculo.java, adicionamos atributos que sao de todos os tipos de veiculo, como placa, cor e ano de fabricacao. Tambem iremos implementar um metodo para imprimir o relatorio e um outro que traduz um valor booleano em uma string('Sim' e 'Nao') para que o usuario possa entender o que esta sendo retornado. Implementacao da classe pai:/** * @author marco.bidoia@gmail.com * */public class Veiculo{ String placa; String cor; int ano; public void Relatorio(){ System.out.println("Placa: " + placa); System.out.println("Cor: " + cor); System.out.println("Ano:" + ano); } public StringgetBooleanToStr(boolean valorBooleano){ if(valorBooleano){ return "Sim"; }else{ return "Nao"; } }} Agora vamos implementar a classe filha que herdara todos os atributos e metodos da classe Pai. Observe que na primeira linha do metodo de Relatorio usamos a seguinte linha "super.Relatorio();" para garantirmos que o que foi implementado na classe pais seja impresso antes do que tem na classe filha./** * @author marco.bidoia@gmail.com * */public class Passeio extends Veiculo { int numPortas; boolean direcaohidraulica; public void Relatorio(){ super.Relatorio(); System.out.println("Numerode portas: " + numPortas); System.out.println("Direcaohidraulica: " + getBooleanToStr(direcaohidraulica)); }} No metodo de Relatorio anterior observe que para imprimir o valor booleano usamos um metodo chamado "getBooleanToStr(boolean)" que ao passarmos um valor boolean nos retorna "Sim"(True) ou "nao"(False) para que o resultado fique legivel aos usuarios. Aqui temos mais uma classe que herdou da mesma classe pai, mais que tem os atributos diferentes da outra classe filha. Mas tambem compartilha os atributos da classe pai e no metodo de relatorio tambem utiliza o "super.Relatorio();" para imprimir os atributos da classe pai./** * @author marco.bidoia@gmail.com * */public class Transporte extends Veiculo{ int capacidade; String tipo; public void Relatorio(){ super.Relatorio(); System.out.println("Capacidade:" + capacidade); System.out.println("Tipo:" + tipo); } } Agora vamos implementar a classe que vai consumir as duas classe filhas anteriores, e por heranca a classe pai tambem. Observe que criamos dois objetos diferentes e alimentamos cada um com os valores necessarios. Apos alimentar cada objeto chamamos o metodo que imprime os valores dos objetos./** * @author marco.bidoia@gmail.com * */public class UsandoVeiculo { public static void main(String[] args){ // Veiculode passeio Passeio Lancer = new Passeio(); Lancer.ano = 2012; Lancer.cor = "Prata"; Lancer.direcaohidraulica = true; Lancer.numPortas = 4; Lancer.placa = "ABC1234"; Lancer.Relatorio(); System.out.print("\n"); // Veiculo de transporte Transporte Onibus = new Transporte(); Onibus.ano = 2010; Onibus.cor = "Verde"; Onibus.tipo = "Urbano"; Onibus.capacidade = 44; Onibus.placa = "QWE0987"; Onibus.Relatorio(); }}O resultado da nossa aplicacao sera este:Placa: ABC1234Cor: PrataAno: 2012Numero de portas: 4Direcao hidraulica: SimPlaca: QWE0987Cor: VerdeAno: 2010Capacidade: 44Tipo: Urbano