Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Programação Orientada a Objetos
Dynamic Binding Modificador final
2
3.6.1 Dynamic Binding Na classe TestePonto, quando chamamos o método print do objeto referenciado pela variável p3, em tempo de compilação é verificado se esse método está definido na classe Ponto3D que é o tipo deste objeto. Porém, em tempo de execução, a referência do objeto poderia estar se referindo a alguma subclasse do tipo de referência declarado. Nesse caso, a decisão de qual método será executado é feita em tempo de execução (dynamic binding). Essa propriedade do objeto decidir qual método aplicará para si na hierarquia de classes é chamada de polimorfismo. Alan Santos
3
3.6.1 Dynamic Binding Implemente o código abaixo, execute-o e observe o seu resultado: class Polimorfismo { public static void main (String args []){ Ponto2D p1 = new Ponto2D (1,1); Ponto2D p2 = new Ponto3D (2,2,2); p1.print (); p2.print (); } Alan Santos
4
3.6.1 Dynamic Binding No método main declaramos a variável p2 como sendo do tipo Ponto e depois armazenamos nela uma referência a uma instância da classe Ponto3D. Quando chamamos o método print( ) (p2.print ( ) ), o interpretador Java verifica que, na verdade, p2 é uma instância de Ponto3D e, portanto, chama o método print da classe Ponto3D e não da classe Ponto. Alan Santos
5
3.6.1 Dynamic Binding No método main de Polimorfismo declare uma variável p3 como sendo do tipo Ponto3D e depois armazene nela uma referência a uma instância da classe Ponto. Observe que como Ponto é a superclasse, ele pode referenciar objetos de subclasses, mas o contrário (uma variável do tipo Ponto3D referenciar um objeto do tipo Ponto) gera erro em tempo de compilação. Alan Santos
6
3.6.1 Dynamic Binding Por exemplo, podemos fazer:
Ponto p1 = new Ponto( ); Ponto p2 = new Ponto3D( ); Mas não podemos fazer: Ponto3D p3 = new Ponto( ); Alan Santos
7
3.6.1 Dynamic Binding Agora, em Polimorfismo, execute o código abaixo:
Ponto p2 = new Ponto3D ( ); Ponto3D p4 = (Ponto3D) p2; Alan Santos
8
3.6.1 Dynamic Binding Veja que temos que usar casting se queremos que uma variável do tipo Ponto3D receba a referência de um objeto Ponto3D contida em uma variável do tipo Ponto. Caso contrário, será gerado erro em tempo de compilação. Alan Santos
9
3.6.1 Dynamic Binding Regras para métodos sobrescritos:
Um método não pode ser menos acessível que o método que ele sobrescreve. No exemplo explicado anteriormente, não é possível o método print da classe Ponto ser public e o da classe Ponto3D ser private. Mas, o contrário é válido. Alan Santos
10
3.6.1 Dynamic Binding 1 Elipse e = new Elipse(); 2 Circulo c = new Circulo(); 3 e = c; 4 e.calcularArea( ); A atribuição da linha 3 é dinamicamente acoplada, pois acopla o objeto ‘e’ a um tipo diferente de seu tipo originalmente declarado. Em princípio, seria uma violação atribuir um objetos de um tipo diferentes tipo a variável ‘e’, no entanto, como ‘c’ (Circulo) é subclasse de ‘e’ (Elipse) essa atribuição é válida. Qual o método executado ? Círculo ou Elipse ? Alan Santos
11
3.6.1 Dynamic Binding A operação executada é a de Circulo, porque o compilador em tempo de execução verifica que a variável aponta para um objeto desta classe Em algumas linguagens o programador deve pedir explicitamente o acoplamento dinâmico para uma mensagem em particular. Importante: Todas as operações sobrecarregadas na classe derivada devem proporcionar semanticamente os mesmos serviços oferecidos pela superclasse. Alan Santos
12
3.7 O Modificador “final” Todos os métodos podem ser sobrepostos.
Se você quiser declarar que não deseja mais permitir que as subclasses sobreponham métodos de uma classe, deve declará-las como final. Alan Santos
13
3.7 O Modificador “final” Altere o método print da classe Ponto, declarando-o como final: public final void print ( ) { Observe que é gerado um erro em tempo de compilação, pois ele é redefinido na classe Ponto3D. Alan Santos
14
3.7 O Modificador “final” Enquanto os métodos final não podem ser sobrepostos, as variáveis declaradas como final não podem ter os seus valores alterados no código do programa. Isso gera erro em tempo de compilação. Alan Santos
15
3.7 O Modificador “final” Variáveis com o modificador final
Não podem ser modificadas depois de inicializadas Podem ser de instância ou de classe Classes com o modificador final Não podem ser herdadas Pode ser usado junto com static um membro final static é uma constante Nunca muda de valor Alan Santos
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.