Documente Academic
Documente Profesional
Documente Cultură
Programa Captulo 5
Converso de Tipos Polimorfismo O Modificador final O Modificador abstract
LES/PUC-Rio
Programa Captulo 5
Converso de Tipos Polimorfismo O Modificador final O Modificador abstract Exerccios IR e Lista Encadeada
LES/PUC-Rio
Diagrama de Classes
Converso (1)
Para estudarmos a compatibilidade entre classes, subclasses e superclasses, tomemos o trecho de cdigo a seguir:
Public class Ex { public static void main(String[] args) { Poligono p1=new Quadrado(); Retangulo r1=new Quadrado(); } }
Neste exemplo podemos notar que a varivel p1, do tipo Poligono, ir guardar uma referncia para um objeto do tipo Quadrado aps a execuo de new Quadrado().
LES/PUC-Rio
Converso (2)
Isso pode ser feito porque todo quadrado um retngulo; isto , todas as propriedades de um retngulo so vlidas para um quadrado; O mesmo se aplica a um polgono: todas as propriedades de um polgono so vlidas para um quadrado; Isso nos permite referenciar um objeto de uma classe a partir de uma referncia para um ancestral da classe em questo;
LES/PUC-Rio
Converso Explcita
Assim como podemos converter um double em um int, embora possa haver perda de informao, ns tambm podemos converter um objeto de uma superclasse em um objeto de uma subclasse; Entretanto, isso deve ser feito de maneira explcita, colocando nome do tipo entre parnteses, e imediatamente antes do objeto que ser convertido.
public static void main(String[] args) { Poligono p1=new Quadrado(); Quadrado q1=(Quadrado)p1; }
LES/PUC-Rio
Poligono p2=new Triangulo(); Quadrado q2=(Quadrado)p2; //erro de tempo de execuo //um tringulo no um quadrado
LES/PUC-Rio
LES/PUC-Rio
10
O operador retorna true se o objeto <varObj> for uma instncia de <tipoObj>, ou de uma descendente da mesma; Caso contrrio, o operador retorna false.
LES/PUC-Rio 11
Exemplo
public class Main { public static void main(String[] args) { Poligono []lst=new Poligono[3]; Retangulo x; lst[0]=new Retangulo(); lst[1]=new Retangulo(); lst[2]=new Triangulo(); for(Poligono p:lst) if(p instanceof Retangulo) x=(Retangulo)p; } }
LES/PUC-Rio
12
Programa Captulo 5
Converso de Tipos Polimorfismo O Modificador final O Modificador abstract Exerccios IR e Lista Encadeada
LES/PUC-Rio
13
Polimorfismo (1)
Polimorfismo (poli- + -morfismo) a capacidade de assumir vrias formas; Em termos prticos, podemos dizer que um meio de usar um mesmo nome para se referir a vrios mtodos distintos; Em Java existem dois tipos de polimorfismo:
O primeiro, j visto, chamado de overloading (sobrecarga). Ele se resume a uma classe possuir vrios mtodos com o mesmo nome, mas com assinaturas distintas;
LES/PUC-Rio
14
Polimorfismo (2)
(cont)
O segundo, chamado overriding (sobrescrita), ocorre quando uma classe possui um mtodo com a mesma assinatura (nome, tipo e ordem dos parmetros) que um mtodo da sua superclasse; Quando isso acontece, dizemos que o mtodo da classe derivada sobrescreve o mtodo da superclasse.
LES/PUC-Rio
15
Sobrescrita
Na sobrecarga, a amarrao entre a chamada do mtodo e o mtodo em si resolvida em tempo de compilao (early binding ou amarrao esttica); Na sobrescrita, a amarrao entre a chamada do mtodo e o mtodo em si resolvida em tempo de execuo (late binding ou amarrao dinmica); Isso ocorre porque, como vimos anteriormente, uma referncia para uma classe pode, em tempo de execuo, referenciar objetos da prpria classe e objetos das suas classes derivadas.
LES/PUC-Rio
16
Sobrescrita - Exemplo
Sejam as classes C1 e C2 abaixo:
public class C1 { public void m1() { System.out.println("PUC-Rio"); } }
LES/PUC-Rio
17
LES/PUC-Rio
18
de
LES/PUC-Rio
19
Sobrescrita Visibilidade
Quando acrescentamos um mtodo m2() na classe C2, o comando a seguir ir causar um erro de compilao?
public class Ex09 { public static void main(String[] args) { C1 p=new C2(); p.m2(); } }
LES/PUC-Rio
20
Programa Captulo 5
Converso de Tipos Polimorfismo O Modificador final O Modificador abstract Exerccios IR e Lista Encadeada
LES/PUC-Rio
21
O Modificador final
O modificador final j foi visto anteriormente. Naquela ocasio ele foi usado para definir constantes:
private final int x=2; //define uma constante inteira //cujo valor 2
Quando o modificador final usado em uma classe ficamos impedidos de criar subclasses da mesma.
public final class C3 {}
LES/PUC-Rio
22
public class C4 extends C3 { public void m3() //erro: o mtodo final m3() //no pode se sobrescrito { } }
LES/PUC-Rio
23
Programa Captulo 5
Converso de Tipos Polimorfismo O Modificador final O Modificador abstract Exerccios IR e Lista Encadeada
LES/PUC-Rio
24
LES/PUC-Rio
25
LES/PUC-Rio
26
A classe Component a superclasse de muitas classes Java usadas para a construo de interfaces grficas com os usurios (botes, labels, menus, campos de texto e etc.); Dessa forma, a classe Component atende ao primeiro requisito apresentado anteriormente para se tornar uma classe abstrata: ela possui vrias subclasses.
LES/PUC-Rio
27
LES/PUC-Rio
28
public abstract class Component { public void setBackground(java.awt.Color c) { /* cdigo */} public void setVisible(boolean r) { /* cdigo */} public void setLocation(int x,int y) { /* cdigo */} public abstract void draw(); }
LES/PUC-Rio
30