Escolar Documentos
Profissional Documentos
Cultura Documentos
Guillermo Cámara-Chávez
I Simplifica a programação
1/103
Polimorfismo (cont.)
2/103
TestePolimorfismo.java
p u b l i c c l a s s Super {
public void print () {
System . o u t . p r i n t l n ( " Chamada de superclasse " ) ;
}
}
p u b l i c c l a s s Sub e x t e n d s S u p e r {
public void print () {
System . o u t . p r i n t l n ( " Chamada da subclasse " ) ;
}
}
3/103
TestePolimorfismo.java (cont.)
public c l a s s JavaPolimorfismo {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
S u p e r sup = new S u p e r ( ) ;
Sub sub = new Sub ( ) ;
S u p e r p o l i = new Sub ( ) ;
sup . p r i n t ( ) ;
sub . p r i n t ( ) ;
poli . print () ;
}
}
4/103
TestePolimorfismo.java (cont.)
Chamada de s u p e r c l a s s e
Chamada da s u b c l a s s e
Chamada da s u b c l a s s e
5/103
TestePolimorfismo.java (cont.)
6/103
Classes e Métodos Abstratos
I Mais genéricas
7/103
Classes e Métodos Abstratos (cont.)
8/103
Classes e Métodos Abstratos (cont.)
9/103
Classes e Métodos Abstratos (cont.)
10/103
Classes e Métodos Abstratos (cont.)
11/103
Classes e Métodos Abstratos (cont.)
I Comportamento polimórfico.
12/103
Classes e Métodos Abstratos (cont.)
13/103
Classes e Métodos Abstratos (cont.)
14/103
Exemplo Polimorfismo e Downcast
15/103
Exemplo Polimorfismo e Downcast (cont.)
I As funções são:
16/103
Exemplo Polimorfismo e Downcast (cont.)
17/103
Exemplo Polimorfismo e Downcast (cont.)
p u b l i c c l a s s Automovel e x t e n d s V e i c u l o {
public void v e r i f i c a L i s t a () {
System . o u t . p r i n t l n ( " Verifica automovel " ) ;
}
public void reparar () {
System . o u t . p r i n t l n ( " Repara automovel " ) ;
}
p u b l i c void limpa () {
System . o u t . p r i n t l n ( " Limpa automovel " ) ;
}
}
18/103
Exemplo Polimorfismo e Downcast (cont.)
19/103
Exemplo Polimorfismo e Downcast (cont.)
20/103
Exemplo Polimorfismo e Downcast (cont.)
p u b l i c v o i d manter ( V e i c u l o v ) {
System . o u t . p r i n t l n ( "\n -------------------" ) ;
v . v e r i f i c a L i s t a () ;
v . reparar () ;
v . limpa () ;
System . o u t . p r i n t l n ( " -------------------" ) ;
}
p u b l i c i n t getR ( ) {
return R;
}
}
21/103
Exemplo Polimorfismo e Downcast (cont.)
22/103
Exemplo Polimorfismo e Downcast (cont.)
Verifica bibicleta
Repara b i c i c l e t a
Limpa b i c i c l e t a
V e r i f i c a automovel
Repara automovel
Limpa a u t o m o v e l
V e r i f i c a automovel
Repara automovel
Limpa a u t o m o v e l
V e r i f i c a automovel
Repara automovel
Limpa a u t o m o v e l
23/103
Exemplo Polimorfismo e Downcast
I Horista
I Assalariado
24/103
Exemplo Polimorfismo e Downcast (cont.)
I Comissionado
I Comissionado Assalariado
25/103
Exemplo Polimorfismo e Downcast (cont.)
26/103
Exemplo Polimorfismo e Downcast (cont.)
27/103
Exemplo Polimorfismo e Downcast (cont.)
Empregado
EmpregadoAssalariado EmpregadoHorista
EmpregadoComissionado
EmpregadoComissionadoAssalariado
28/103
Empregado.java
Empregado
–nome:string
–sobrenome:string
–documento:string
+Empregado(nome:string, sobrenome:string, documento:string)
+setEmpregado(nome:string, sobrenome:string, documento:string)
+toString()
+salario():double
29/103
Empregado.java (cont.)
p u b l i c a b s t r a c t c l a s s Empregado {
p r i v a t e S t r i n g nome ;
p r i v a t e S t r i n g sobrenome ;
p r i v a t e S t r i n g documento ;
p u b l i c Empregado ( S t r i n g nome ,
S t r i n g sobrenome ,
S t r i n g documento ) {
s e t E m p r e g a d o ( nome , sobrenome , documento ) ;
}
p u b l i c v o i d s e t E m p r e g a d o ( S t r i n g nome ,
S t r i n g sobrenome ,
S t r i n g documento ) {
t h i s . nome = nome ;
t h i s . sobrenome = sobrenome ;
t h i s . documento = documento ;
}
30/103
Empregado.java (cont.)
p ub l ic abstract double s a l a r i o () ;
}
31/103
EmpregadoAssalariado.java
EmpregadoAssalariado
–salarioSemamal:double
+EmpregadoAssalariado(nome:string,
sobrenome:string,
documento:string,
salarioS:double)
+setSalarioSemanal(salarioS: double)
+salario()
+toString()
32/103
EmpregadoAssalariado.java (cont.)
p u b l i c c l a s s E m p r e g a d o A s s a l a r i a d o e x t e n d s Empregado {
p r i v a t e double salarioSemanal ;
p u b l i c E m p r e g a d o A s s a l a r i a d o ( S t r i n g nome ,
S t r i n g sobrenome ,
S t r i n g documento ,
double s a l a r i o ){
s u p e r ( nome , sobrenome , documento ) ;
setSalarioSemanal ( salarioSemanal ) ;
}
33/103
EmpregadoAssalariado.java (cont.)
34/103
EmpregadoHorista.java
EmpregadoHorista
–valor:double
–horas:double
+EmpregadoHorista(nome:string,
sobrenome:string,
documento:string,
valor:double,
horas:double)
+setEmpregadoHorista(valor:double, horas:double)
+salario():double
+toString():string
35/103
EmpregadoHorista.java (cont.)
p u b l i c c l a s s E m p r e g a d o H o r i s t a e x t e n d s Empregado {
p r i v a t e double v a l o r ;
p r i v a t e double horas ;
p u b l i c E m p r e g a d o H o r i s t a ( S t r i n g nome ,
S t r i n g snome ,
S t r i n g doc ,
double valor ,
double hora ) {
s u p e r ( nome , snome , doc ) ;
setEmpregadoHorista ( valor , hora ) ;
}
p ub l ic void setEmpregadoHorista ( double valor ,
double hora ) {
this . valor = valor ;
t h i s . horas = hora ;
}
36/103
EmpregadoHorista.java (cont.)
p ub l ic double s a l a r i o () {
i f ( h o r a s <= 4 0 )
return valor ∗ horas ;
else
r e t u r n 40∗ v a l o r +( h o r a s −40)∗ v a l o r ∗ 1 . 5 ;
}
public String toString () {
r e t u r n S t r i n g . f o r m a t ( " %s\n %s: %.2f\n %s: %.2f" ,
super . toString () ,
" Horas Trabalhadas " , h o r a s ,
" Valor por hora " , v a l o r ) ;
}
}
37/103
EmpregadoComissionado.java
EmpregadoComissionado
–vendas:double
–comissao:double
+EmpregadoComissionado(nome:string,
sobrenome:string,
documento:string,
vendas:double,
comissao:double)
+setEmpregadoComissao(vendas:double, comissao:double)
+salario():double
+toString():string
38/103
EmpregadoComissionado.java (cont.)
p u b l i c c l a s s E m p r e g a d o C o m i s s i o n a d o e x t e n d s Empregado {
p r i v a t e double vendas ;
p r i v a t e double comissao ;
p u b l i c E m p r e g a d o C o m i s s i o n a d o ( S t r i n g nome ,
S t r i n g sobrenome ,
S t r i n g doc ,
double v ,
double c ){
s u p e r ( nome , sobrenome , doc ) ;
setEmpregadoComissionado ( v , c ) ;
}
p u b l i c void setEmpregadoComissionado ( double v ,
double c ){
vendas = v ;
comissao = c ;
}
39/103
EmpregadoComissionado.java (cont.)
p ub l ic double s a l a r i o () {
r e t u r n vendas ∗ comissao ;
}
public String toString () {
r e t u r n S t r i n g . f o r m a t ( " %s\n %s: %.2f\n %s: %.2f" ,
super . toString () ,
" Total em vendas " , v e n d a s ,
" Comissao " , c o m i s s a o ) ;
}
}
40/103
EmpregadoComissionadoAssalariado.java
EmpregadoComissionadoAssalariado
–salarioMensal:double
+EmpregadoComissionadoAssalariado(nome:string,
sobrenome:string,
documento:string,
vendas:double,
comissao:double,
salarioM:double)
+setSalarioMensal(sm:double)
+getSalarioMensal():double
+salario():double
+toString():string
41/103
EmpregadoComissionadoAssalariado.java (cont.)
p ub l ic c l a s s EmpregadoComissionadoAssalariado extends
EmpregadoComissionado {
p r i v a t e double salarioMensal ;
p u b l i c E m p r e g a d o C o m i s s i o n a d o A s s a l a r i a d o ( S t r i n g nome ,
S t r i n g sobrenome ,
S t r i n g doc ,
double v ,
double c ,
d o u b l e sm ) {
s u p e r ( nome , sobrenome , doc , v , c ) ;
s e t S a l a r i o M e n s a l ( sm ) ;
}
p u b l i c v o i d s e t S a l a r i o M e n s a l ( d o u b l e sm ) {
s a l a r i o M e n s a l = sm ;
}
42/103
EmpregadoComissionadoAssalariado.java (cont.)
p ub l ic double getSalarioMensal () {
return salarioMensal ;
}
p ub l ic double s a l a r i o () {
r e t u r n g e t S a l a r i o M e n s a l ( )+s u p e r . s a l a r i o ( ) ;
}
public String toString () {
r e t u r n S t r i n g . f o r m a t ( " %s\n %s: %.2f" ,
super . toString () ,
" Salario Mensal " , g e t S a l a r i o M e n s a l ( ) ) ;
}
}
43/103
DriverEmpregado.java
p u b l i c c l a s s DriverEmpregado {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
E m p r e g a d o A s s a l a r i a d o ea =
new E m p r e g a d o A s s a l a r i a d o ( " John " , " Smith " ,
" 1111111 -1 " , 8 0 0 . 0 0 ) ;
E m p r e g a d o H o r i s t a eh =
new E m p r e g a d o H o r i s t a ( " Karen " , " Price " ,
" 2222222 -2 " , 1 6 . 7 5 , 4 0 ) ;
EmpregadoComissionado ec =
new E m p r e g a d o C o m i s s i o n a d o ( " Sue " , " Jones " ,
" 3333333 -3 " , 1 0 0 0 0 , 0 . 0 6 ) ;
EmpregadoComissionadoAssalariado eca =
new E m p r e g a d o C o m i s s i o n a d o A s s a l a r i a d o ( " Bob " ,
" Lewis " , " 44444444 -4 " , 5 0 0 0 , 0 . 0 4 ,
300) ;
44/103
DriverEmpregado.java (cont.)
vetor [0] = ea ;
vetor [1] = eh ;
vetor [2] = ec ;
vetor [3] = eca ;
45/103
DriverEmpregado.java (cont.)
System . o u t . p r i n t l n ( " Processando
polimorficamente " ) ;
f o r ( Empregado elem : v e t o r ) {
System . o u t . p r i n t l n ( elem ) ;
System . o u t . p r i n t l n ( ) ;
i f ( elem i n s t a n c e o f
EmpregadoComissionadoAssalariado ){
E m p r e g a d o C o m i s s i o n a d o A s s a l a r i a d o tmp =
( EmpregadoComissionadoAssalariado )
elem ;
tmp . s e t S a l a r i o M e n s a l (
tmp . g e t S a l a r i o M e n s a l ( ) ∗ 1 . 1 )
;
System . o u t . p r i n t l n ( tmp ) ;
}
System . o u t . p r i n t l n ( " Salario : "
+ elem . s a l a r i o ( ) ) ;
System . o u t . p r i n t l n ( ) ;
} 46/103
DriverEmpregado.java (cont.)
f o r ( Empregado elem : v e t o r ) {
System . o u t . p r i n t l n ( "O empregado e "
+ elem . g e t C l a s s ( ) . getSimpleName ( ) ) ;
}
}
}
47/103
DriverEmpregado.java (cont.)
Processando individualmente
800.00
670.00
600.00
500.00
Processando polimorficamente
Nome : : John
Sobrenome : Smith
Documento : 1111111 −1
S a l a r i o semanal : 800.0
S a l a r i o : 800.0
48/103
DriverEmpregado.java (cont.)
Nome : : Karen
Sobrenome : P r i c e
Documento : 2222222 −2
H or as T r a b a l h a d a s : 4 0 . 0 0
Valor por hora : 16.75
S a l a r i o : 670.0
Nome : : Sue
Sobrenome : J o n e s
Documento : 3333333 −3
T o t a l em v e n d a s : 1 0 0 0 0 . 0 0
C om i ss a o : 0 . 0 6
S a l a r i o : 600.0
49/103
DriverEmpregado.java (cont.)
Sobrenome : L e w i s
Documento : 44444444 −4
T o t a l em v e n d a s : 5 0 0 0 . 0 0
C om i ss a o : 0 . 0 4
S a l a r i o Mensal : 3 0 0 . 0 0
Nome : : Bob
Sobrenome : L e w i s
Documento : 44444444 −4
T o t a l em v e n d a s : 5 0 0 0 . 0 0
C om i ss a o : 0 . 0 4
S a l a r i o Mensal : 3 3 0 . 0 0
S a l a r i o : 530.0
O empregado e EmpregadoAssalariado
O empregado e EmpregadoHorista
O empregado e EmpregadoComissionado
O empregado e EmpregadoComissionadoAssalariado
50/103
DriverEmpregado.java (cont.)
51/103
Resolução Dinâmica
52/103
Operador instanceof
53/103
Downcast
I Downcast
54/103
Downcast (cont.)
55/103
Método getClass
I Retorna um objeto;
56/103
Métodos e Classes final
I Uma classe que é declarada como final não pode ser uma
superclasse
57/103
Criando e Utilizando Interfaces
58/103
Criando e Utilizando Interfaces (cont.)
59/103
Criando e Utilizando Interfaces (cont.)
60/103
Criando e Utilizando Interfaces (cont.)
I Quais operações.
61/103
Criando e Utilizando Interfaces (cont.)
62/103
Criando e Utilizando Interfaces (cont.)
63/103
Criando e Utilizando Interfaces (cont.)
64/103
Criando e Utilizando Interfaces (cont.)
65/103
Criando e Utilizando Interfaces (cont.)
I Métodos ou atributos
66/103
Exemplo
67/103
Exemplo (cont.)
68/103
Exemplo (cont.)
69/103
Exemplo (cont.)
70/103
Pagavel.java
p u b l i c i n t e r f a c e Pagavel
{
// calcula o pagamento, não possui implementação
double getValorAPagar () ;
}
71/103
NotaFiscal.java
p u b l i c N o t a F i s c a l ( S t r i n g peca , S t r i n g d e s c r i c a o ,
i n t numero , d o u b l e p r e c o ) {
numeroPeca = p e c a ;
descricaoPeca = descricao ;
s e t Q u a n t i d a d e ( numero ) ;
setPrecoPorItem ( preco ) ;
}
p u b l i c v o i d s e t Q u a n t i d a d e ( i n t numero ) {
q u a n t i d a d e = numero > 0 ? numero : 0 ;
}
72/103
NotaFiscal.java (cont.)
p u b l i c i n t getQuantidade () {
return quantidade ;
}
p u b l i c double getPrecoPorItem () {
return precoPorItem ;
}
p u b l i c S t r i n g getNumeroPeca ( ) {
r e t u r n numeroPeca ;
}
p u b l i c v o i d setNumeroPeca ( S t r i n g numeroPeca ) {
t h i s . numeroPeca = numeroPeca ;
}
73/103
NotaFiscal.java (cont.)
74/103
NotaFiscal.java (cont.)
p u b l i c double getValorAPagar () {
return getQuantidade () ∗ getPrecoPorItem () ;
}
}
75/103
Empregado.java
p u b l i c a b s t r a c t c l a s s Empregado i m p l e m e n t s P a g a v e l {
p r i v a t e S t r i n g nome ;
p r i v a t e S t r i n g sobrenome ;
p r i v a t e S t r i n g documento ;
p u b l i c Empregado ( S t r i n g n , S t r i n g s , S t r i n g d ) {
nome = n ;
sobrenome = s ;
documento = d ;
}
p u b l i c S t r i n g getNome ( ) {
r e t u r n nome ;
}
p u b l i c v o i d setNome ( S t r i n g nome ) {
t h i s . nome = nome ;
}
76/103
Empregado.java (cont.)
p u b l i c S t r i n g getSobrenome ( ) {
r e t u r n sobrenome ;
}
p u b l i c v o i d s e t S o b r e n o m e ( S t r i n g sobrenome ) {
t h i s . sobrenome = sobrenome ;
}
p u b l i c S t r i n g getDocumento ( ) {
r e t u r n documento ;
}
p u b l i c v o i d setDocumento ( S t r i n g documento ) {
t h i s . documento = documento ;
}
77/103
Empregado.java (cont.)
78/103
EmpregadoAssalariado.java
p u b l i c c l a s s E m p r e g a d o A s s a l a r i a d o e x t e n d s Empregado {
p r i v a t e double salarioMensal ;
p ub l ic double getSalarioMensal () {
return salarioMensal ;
}
79/103
EmpregadoAssalariado.java (cont.)
p u b l i c double getValorAPagar () {
return getSalarioMensal () ;
}
}
80/103
TesteInterfacePagavel.java
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
P a g a v e l p a g a v e l [ ] = new P a g a v e l [ 4 ] ;
81/103
TesteInterfacePagavel.java (cont.)
f o r ( P a g a v e l elem : p a g a v e l ) {
System . o u t . p r i n t f ( "\n %s \n %s: $ %.2f\n" ,
elem . t o S t r i n g ( ) , " Pagamento Devido " ,
elem . g e t V a l o r A P a g a r ( ) ) ;
}
}
82/103
TesteInterfacePagavel.java (cont.)
Notas F i s c a i s e Empregados p r o c e s s a d o s p o l i m o r f i c a m e n t e
Nota
p e c a numero : 01234 ( banco )
quantidade : 2
p r e c o p o r i t e m : $375 . 0 0
Pagamento D e v i d o : $750 . 0 0
Nota
p e c a numero : 56789 ( pneu )
quantidade : 4
p r e c o p o r i t e m : $79 . 9 5
Pagamento D e v i d o : $319 . 8 0
83/103
TesteInterfacePagavel.java (cont.)
Empregado A s s a l a r i a d o
John Smith
documento : 111−11−1111
S a l a r i o : $800 . 0 0
Pagamento D e v i d o : $800 . 0 0
Empregado A s s a l a r i a d o
L i s a Barnes
documento : 888−88−8888
S a l a r i o : $1200 . 0 0
Pagamento D e v i d o : $1200 . 0 0
84/103
Exemplo
85/103
Exemplo (cont.)
86/103
Exemplo (cont.)
87/103
Declarando Constantes em Interfaces
88/103
Declarando Constantes em Interfaces (cont.)
89/103
Declarando Constantes em Interfaces (cont.)
public i n t e r f a c e Constants
{
i n t ONE = 1 ;
i n t TWO = 2 ;
i n t THREE = 3 ;
}
90/103
Herança Múltipla e Interfaces
91/103
Herança Múltipla e Interfaces (cont.)
92/103
Herança Múltipla e Interfaces (cont.)
p u b l i c a b s t r a c t c l a s s Animal {
public abstract void fazerBarulho () ;
}
p u b l i c i n t e r f a c e Pesado {
double obterPeso () ;
}
93/103
Herança Múltipla e Interfaces (cont.)
94/103
Herança Múltipla e Interfaces (cont.)
95/103
Herança Múltipla e Interfaces (cont.)
Cor : P r e t o
Peso : 5 0 . 0 0 0 0 0 0
Enlameado ? t r u e
Oinc !
96/103
Interfaces Comuns da API Java
I Comparable
I Serializable
I Runnable
I Swing Constants
97/103
Interfaces Comuns da API Java (cont.)
I Comparable
I compareTo()
I Serializable
99/103
Interfaces Comuns da API Java (cont.)
I Runnable
100/103
Interfaces Comuns da API Java (cont.)
101/103
Interfaces Comuns da API Java (cont.)
I Swing Constants
102/103
FIM
103/103