Java 09 Heranca Reescrita Polimorfismo

Embed Size (px)

Citation preview

  • 1. Herana, Reescrita e Polimorfismo
      • Regis Pires Magalhes
    • [email_address]

2. Herana

    • Java suporta apenas o uso de herana simples
    • Uma subclasse s pode herdar de uma nica superclasse diretamente
    • Java suporta a noo de interfaces a fim de oferecer uma funcionalidade semelhante a herana mltipla
    • A palavra-chaveextends utilizada na definio de uma classe para indicar que ela herda de outra classe
      • public class PessoaFisica extends Pessoa { ... }

3. Herana

    • O conceito de herana define uma hierarquia de classes em Java
      • A classeObject , que definida no pacotejava.lang , a classe raiz da hierarquia de classes
      • Exceto a classeObject , toda classe em Java possui uma superclasse
      • Todos os mtodos definidos na classeObjectpodem ser invocados por qualquer objeto Java
    • Uma subclasse no tem acesso direto aos membros privados de sua superclasse
    • Todo objeto de uma subclasse tambm um objeto de sua superclasse

4. Herana 5.

    • Membros privados de uma superclasse no podem ser acessados por uma subclasse.
    • Para chamar um construtor da superclasse utilize apalavra-chavesuper.
    • O uso desuperpara invocar o construtor de uma superclasse anlogo ao uso dethis .
      • supers pode ser usado dentro de um construtor.
      • A chamada ao construtor da superclasse deve aparecer como o primeiro comando dentro de um construtor.
    • Java assegura que todo mtodo construtor invoca um construtor de sua superclasse.
    • Se o primeiro comando em um construtor no for uma chamada explcita para um construtor da superclasse, Java implicitamente insere a chamadasuper()no incio do construtor da subclasse.

Construtores de Subclasses 6. Construtores de Subclasses

  • Exemplo

7. Encadeamento de Construtores

    • O que ocorre quando o construtor de uma classe invocado?
    • O que isso implica?
      • O corpo do construtor da classe Object executado primeiro
      • Depois, o construtor da superclasse executado
      • Por fim, o construtor da subclasse executado

// Construtor SubClasse() { super() } // Construtor SuperClasse() { super() } // Construtor Object() { } 8. Construtor Padro public class Circulo extends Forma { // Suponhamos que a classe Circulo (subclasse de Forma) // no define nenhum construtor // Java adiciona o construtor padropublicCirculo() { super ();} } 9. Consideraes Finais sobre Construtores

    • Se uma classe no define nenhum construtor, Java cria um construtor pblico para ela ( public )
    • Classes que no desejam ser instanciadas de forma pblica devem declarar um construtor protegido ( protected )
    • Classes que no devem ser instanciadas de forma nenhuma devem declarar um construtor privado ( private )

10. Sobrescrita de Mtodos

    • Tambm conhecida comomethod overriding.
    • Ocorre quando uma subclasse define um mtodo idntico a um mtodo de sua superclasse
      • Mtodos idnticos possuem o mesmo nome, tipo de retorno e lista de parmetros
    • Utilizado quando o comportamento do mtodo da superclasse no corresponde ao desejado para o mtodo da subclasse
    • Sobrescrita de mtodo no tem nada a ver com sobrecarga de mtodo

11. Sobrescrita de Mtodos

  • Como garantir que um mtodo de uma superclasse nunca seja sobrescrito em uma subclasse dela?
    • Declare o mtodo como final, adicionando a palavra-chavefinalno prottipo do mtodo

12. Sobrescrita de Mtodos 13. Polimorfismo

    • Permite que um tipo expresse sua diferena em relao a outro similar, desde que eles sejam originados do mesmo tipo-base
    • Completa o trip que define POO, que tambm inclui encapsulamento e herana
    • Permite a criao de cdigo extensvel
      • Permite adio de funcionalidades a uma classe tomando-se por base um cdigo j existente
      • Permite separar a interface da implementao

14. Polimorfismo 15. Polimorfismo

  • Ligao de Chamada de Mtodos (binding)
    • Conexo de uma chamada de mtodo ao corpo de um mtodo:
      • Ligao Prvia (early binding)
        • Quando o binding (processo de ligao) feito antes do programa ser executado
        • nica opo disponvel em Pascal e C
      • Ligao Tardia (late binding ou dynamic binding)
        • Quando o binding (processo de ligao) feito durante a execuo do programa
        • No se pode determinar, em tempo de compilao ou linkagem, que mtodo deve ser executado para uma chamada de mtodo
        • Disponvel em linguagens como C++ e Java

16. Polimorfismo

    • Toda chamada de mtodo em Java utiliza ligao tardia, a no ser que o mtodo seja declarado comofinal
      • O programador no precisa se preocupar com que tipo de ligao ser utilizada
      • Java descobre o tipo do objeto a que se destina a mensagem (invocao de mtodo) e executa o corpo de mtodo apropriado para o tipo do objeto
      • O programador escreve cdigo para a classe-base e sabe que, para todas as subclasses, ele ser executado corretamente