Java 09 Heranca Reescrita Polimorfismo

8,062 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,062
On SlideShare
0
From Embeds
0
Number of Embeds
57
Actions
Shares
0
Downloads
259
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Java 09 Heranca Reescrita Polimorfismo

  1. 1. Herança, Reescrita e Polimorfismo <ul><ul><li>Regis Pires Magalhães </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul>
  2. 2. Herança <ul><ul><li>Java suporta apenas o uso de herança simples </li></ul></ul><ul><ul><li>Uma subclasse só pode herdar de uma única superclasse diretamente </li></ul></ul><ul><ul><li>Java suporta a noção de interfaces a fim de oferecer uma funcionalidade semelhante a herança múltipla </li></ul></ul><ul><ul><li>A palavra-chave extends é utilizada na definição de uma classe para indicar que ela herda de outra classe </li></ul></ul><ul><ul><ul><li>public class PessoaFisica extends Pessoa { ... } </li></ul></ul></ul>
  3. 3. Herança <ul><ul><li>O conceito de herança define uma hierarquia de classes em Java </li></ul></ul><ul><ul><ul><li>A classe Object , que é definida no pacote java.lang , é a classe raiz da hierarquia de classes </li></ul></ul></ul><ul><ul><ul><li>Exceto a classe Object , toda classe em Java possui uma superclasse </li></ul></ul></ul><ul><ul><ul><li>Todos os métodos definidos na classe Object podem ser invocados por qualquer objeto Java </li></ul></ul></ul><ul><ul><li>Uma subclasse não tem acesso direto aos membros privados de sua superclasse </li></ul></ul><ul><ul><li>Todo objeto de uma subclasse também é um objeto de sua superclasse </li></ul></ul>
  4. 4. Herança
  5. 5. <ul><ul><li>Membros privados de uma superclasse não podem ser acessados por uma subclasse. </li></ul></ul><ul><ul><li>Para chamar um construtor da superclasse utilize a palavra-chave super. </li></ul></ul><ul><ul><li>O uso de super para invocar o construtor de uma superclasse é análogo ao uso de this . </li></ul></ul><ul><ul><ul><li>super só pode ser usado dentro de um construtor. </li></ul></ul></ul><ul><ul><ul><li>A chamada ao construtor da superclasse deve aparecer como o primeiro comando dentro de um construtor. </li></ul></ul></ul><ul><ul><li>Java assegura que todo método construtor invoca um construtor de sua superclasse. </li></ul></ul><ul><ul><li>Se o primeiro comando em um construtor não for uma chamada explícita para um construtor da superclasse, Java implicitamente insere a chamada super() no início do construtor da subclasse. </li></ul></ul>Construtores de Subclasses
  6. 6. Construtores de Subclasses <ul><li>Exemplo </li></ul>
  7. 7. Encadeamento de Construtores <ul><ul><li>O que ocorre quando o construtor de uma classe é invocado? </li></ul></ul><ul><ul><li>O que isso implica? </li></ul></ul><ul><ul><ul><li>O corpo do construtor da classe Object é executado primeiro </li></ul></ul></ul><ul><ul><ul><li>Depois, o construtor da superclasse é executado </li></ul></ul></ul><ul><ul><ul><li>Por fim, o construtor da subclasse é executado </li></ul></ul></ul>// Construtor SubClasse() { super(…) … } // Construtor SuperClasse() { super(…) … } // Construtor Object() { … }
  8. 8. Construtor Padrão public class Circulo extends Forma { // Suponhamos que a classe Circulo (subclasse de Forma) // não define nenhum construtor // Java adiciona o construtor padrão public Circulo() { super (); } }
  9. 9. Considerações Finais sobre Construtores <ul><ul><li>Se uma classe não define nenhum construtor, Java cria um construtor público para ela ( public ) </li></ul></ul><ul><ul><li>Classes que não desejam ser instanciadas de forma pública devem declarar um construtor protegido ( protected ) </li></ul></ul><ul><ul><li>Classes que não devem ser instanciadas de forma nenhuma devem declarar um construtor privado ( private ) </li></ul></ul>
  10. 10. Sobrescrita de Métodos <ul><ul><li>Também conhecida como method overriding. </li></ul></ul><ul><ul><li>Ocorre quando uma subclasse define um método idêntico a um método de sua superclasse </li></ul></ul><ul><ul><ul><li>Métodos idênticos possuem o mesmo nome, tipo de retorno e lista de parâmetros </li></ul></ul></ul><ul><ul><li>Utilizado quando o comportamento do método da superclasse não corresponde ao desejado para o método da subclasse </li></ul></ul><ul><ul><li>Sobrescrita de método não tem nada a ver com sobrecarga de método </li></ul></ul>
  11. 11. Sobrescrita de Métodos <ul><li>Como garantir que um método de uma superclasse nunca seja sobrescrito em uma subclasse dela? </li></ul><ul><ul><li>Declare o método como final, adicionando a palavra-chave final no protótipo do método </li></ul></ul>
  12. 12. Sobrescrita de Métodos
  13. 13. Polimorfismo <ul><ul><li>Permite que um tipo expresse sua diferença em relação a outro similar, desde que eles sejam originados do mesmo tipo-base </li></ul></ul><ul><ul><li>Completa o tripé que define POO, que também inclui encapsulamento e herança </li></ul></ul><ul><ul><li>Permite a criação de código extensível </li></ul></ul><ul><ul><ul><li>Permite adição de funcionalidades a uma classe tomando-se por base um código já existente </li></ul></ul></ul><ul><ul><ul><li>Permite separar a interface da implementação </li></ul></ul></ul>
  14. 14. Polimorfismo
  15. 15. Polimorfismo <ul><li>Ligação de Chamada de Métodos (binding) </li></ul><ul><ul><li>Conexão de uma chamada de método ao corpo de um método: </li></ul></ul><ul><ul><ul><li>Ligação Prévia (early binding) </li></ul></ul></ul><ul><ul><ul><ul><li>Quando o binding (processo de ligação) é feito antes do programa ser executado </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Única opção disponível em Pascal e C </li></ul></ul></ul></ul><ul><ul><ul><li>Ligação Tardia (late binding ou dynamic binding) </li></ul></ul></ul><ul><ul><ul><ul><li>Quando o binding (processo de ligação) é feito durante a execução do programa </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Não se pode determinar, em tempo de compilação ou linkagem, que método deve ser executado para uma chamada de método </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Disponível em linguagens como C++ e Java </li></ul></ul></ul></ul>
  16. 16. Polimorfismo <ul><ul><li>Toda chamada de método em Java utiliza ligação tardia, a não ser que o método seja declarado como final </li></ul></ul><ul><ul><ul><li>O programador não precisa se preocupar com que tipo de ligação será utilizada </li></ul></ul></ul><ul><ul><ul><li>Java descobre o tipo do objeto a que se destina a mensagem (invocação de método) e executa o corpo de método apropriado para o tipo do objeto </li></ul></ul></ul><ul><ul><ul><li>O programador escreve código para a classe-base e sabe que, para todas as subclasses, ele será executado corretamente </li></ul></ul></ul>

×