sábado, 17 de novembro de 2012

Herança


     Herança é um princípio de orientação a objetos, que permite que classes compartilhem atributos e métodos, através de "heranças". Ela é usada na intenção de reaproveitar código ou comportamento generalizado ou especializar operações ou atributos. O conceito de herança de várias classes é conhecido como herança múltipla.(Fonte Wikipédia).

    Neste exemplo iremos implementar uma classe pai(Veiculo) e duas classes filhas(Passeio e Transporte) e uma quarta que será a que vai executar nossa implementação.
Então temos:
01) Veiculo.java
02) Passeio.java
03) Transporte.java
04) UsandoVeiculo.java


     Aqui na primeira classe Veiculo.java, adicionamos atributos que são de todos os tipos de veículo, como placa, cor e ano de fabricação.
    Também iremos implementar um método para imprimir o relatório e um outro que traduz um valor booleano em uma string('Sim' e 'Não') para que o usuário possa entender o que esta sendo retornado.
     Implementação 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 String getBooleanToStr(boolean valorBooleano){
            if (valorBooleano){
                  return "Sim";
            }else{
                  return "Não";               
            }
           
      }
}


     Agora vamos implementar a classe filha que herdara todos os atributos e métodos da classe Pai.
    Observe que na primeira linha do método de Relatório 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("Número de portas: " + numPortas);
            System.out.println("Direção hidraulica: " + getBooleanToStr(direcaohidraulica));
      }
}

     No método de Relatório anterior observe que para imprimir o valor booleano usamos um método chamado  "getBooleanToStr(boolean)" que ao passarmos um valor boolean nos retorna "Sim"(True) ou "não"(False)  para que o resultado fique legível aos usuários.


     Aqui temos mais uma classe que herdou da mesma classe pai, mais que tem os atributos diferentes da outra classe filha. Mas também compartilha os atributos da classe pai e no método de relatório também 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 herança a classe pai também. Observe que criamos dois objetos diferentes e alimentamos cada um com os valores necessários.
     Após alimentar cada objeto chamamos o método que imprime os valores dos objetos.

/**
 * @author marco.bidoia@gmail.com
 *
 */
public class UsandoVeiculo {
     
      public static void main(String[] args){
           
            // Veículo de 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");
           
            // Veículo 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 aplicação será este:

Placa: ABC1234
Cor: Prata
Ano: 2012
Número de portas: 4
Direção hidraulica: Sim

Placa: QWE0987
Cor: Verde
Ano: 2010
Capacidade: 44
Tipo: Urbano


Nenhum comentário:

Postar um comentário