Herança


A herança permite que as classes compartilhem atributos e operações baseados em um relacionamento, ou seja, permite a criação de subclasses que herdam alguns dos atributos e das operações da classe pai (super-classe ou classe base). É usada na intenção de reaproveitar código ou comportamento generalizado ou especializar operações e atributos.
A palavra-chave instanceof retorna true se a variável de referência que está sendo testada é do tipo da que está sendo comparada, ou pertence a sua hierarquia.

public class Heranca {

      public static void main(String[] args) {
            Heranca heranca = new Heranca();
            if (heranca instanceof Object)
                  System.out.println("Herança herda "+
                                    "de Object");
      }
     
}

Toda classe Java é uma subclasse da classe Object. Por causa disso, toda classe em Java terá métodos como equals, clone, notify, wait, pois são herdados da classe Object.
Em Java é possível criar relações de herança estendendo classes. As duas maiores razões para utilizar herança são: para promover o reuso de código e para utilizar polimorfismo.
Uma classe não pode herdar de mais de uma classe, ou seja, uma classe só pode ter uma superclasse imediata, mas pode ter múltiplos ancestrais.
Uma abordagem comum do reuso de código é criar versões de classes bastante genéricas com a intenção de criar subclasses mais específicas que herdem delas.  A reutilização de código através da herança significa que métodos com funcionalidades genéricas, que podem ser aplicados a uma gama de diferentes tipos de classes, não tem que ser reimplementados. Isso significa que toda a subclasse especializada tem por garantia todas as capacidades da superclasse.

public class Pessoa {

      public void falar() {
            System.out.println("Pessoa falando");
      }
     
}

public class Pessoa_Fisica extends Pessoa {

      public void informarCPF() {
            System.out.println("Informando CPF");
      }
     
}

public class AppPessoa {
     
      public static void main(String[] args) {
            Pessoa_Fisica pf = new Pessoa_Fisica();
            //herdou o método falar de Pessoa
            pf.falar();
            pf.informarCPF();
      }
     
}

O segundo uso de herança é o polimorfismo, que torna qualquer subclasse compatível com a superclasse. Isso quer dizer que polimorfismo significa que uma chamada de método pode ser executada de várias formas (ou polimorficamente); quem decide "a forma" é o objeto que recebe a chamada.
Por exemplo: se um objeto a chama um método grita() de um objeto b, então o objeto b decide a forma de implementação do método. Dessa forma, a chamada b.grita() vai ser um grito humano se b possui uma referência para o objeto Humano e será um grito de macaco, se o objeto b possuir uma referência para o objeto Macaco.

public class Profissao {

      public void trabalhar() {
            System.out.println("Trabalhando..");
      }
     
}

public class Professor extends Profissao {

      public void trabalhar() {
            System.out.println("Ensinando..");
      }
     
}

public class Mecanico extends Profissao {

      public void trabalhar() {
            System.out.println("Consertando..");
      }
     
}

public class Test_Profissao {

      public static void main(String[] args) {
            Profissao profissao;
            profissao = new Professor();
            profissao.trabalhar(); //ensinando
            profissao = new Mecanico();
            profissao.trabalhar(); //consertando
      }
     
}

Fonte: SCJP Sun Certifi ed Programmer for Java 6 Study Guide

0 comentários:

Postar um comentário