SlideShare une entreprise Scribd logo
1  sur  61
Universidade Presbiteriana Mackenzie	
  
Aula	
  4:	
  Polimorfismo	
  
Prof. Ms. Daniel Arndt Alves
Faculdade	
  de	
  Computação	
  e	
  Informá<ca	
  
Computação e Informática
Faculdade de
Linguagem	
  de	
  
Programação	
  II	
  
Polimorfismo	
   1	
  Daniel	
  Arndt	
  Alves	
  
Tópicos	
  da	
  Aula	
  
•  Polimorfismo	
  
– Exemplos	
  de	
  Polimorfismo	
  
– Vantagens	
  do	
  Polimorfismo	
  
– Tipos	
  de	
  Polimorfismo	
  
•  Métodos	
  Abstratos	
  
•  Classes	
  Abstratas	
  
•  Vinculação	
  Dinâmica	
  
Polimorfismo	
   2	
  Daniel	
  Arndt	
  Alves	
  
Tópicos	
  da	
  Aula	
  
•  Hierarquia	
  Empregado
– Classe	
  Empregado
– Classe	
  EmpregadoHorista
– Classe	
  EmpregadoPorComissao
– Classe	
  EmpregadoFixoMaisComissao
•  Processamento	
  Polimórfico	
  
– Operador	
  instanceof
– A	
  Classe	
  Class
Polimorfismo	
   3	
  Daniel	
  Arndt	
  Alves	
  
Tópicos	
  da	
  Aula	
  
•  Exemplo	
  de	
  Polimorfismo	
  
•  CasHng	
  
– Cast	
  
– Upcast	
  
– Downcast	
  
•  Métodos	
  Final
•  Classes	
  Final
Polimorfismo	
   4	
  Daniel	
  Arndt	
  Alves	
  
Polimorfismo	
  
•  Permite	
  que	
  um	
  método	
  produza	
  resultados	
  
diferentes,	
  dependendo	
  do	
  objeto	
  ao	
  qual	
  é	
  
aplicado.	
  
•  A	
  mesma	
  invocação	
  pode	
  produzir	
  “muitas	
  
formas”	
  de	
  resultados.	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   5	
  
Polimorfismo	
  
•  Um	
  nome	
  para	
  várias	
  formas,	
  ou	
  ainda,	
  um	
  nome	
  
e	
  várias	
  implementações	
  (vários	
  métodos	
  com	
  o	
  
mesmo	
  nome).	
  
•  Capacidade	
  de	
  uma	
  referência	
  de	
  variável	
  mudar	
  
seu	
  comportamento	
  de	
  acordo	
  com	
  o	
  objeto	
  a	
  
que	
  ela	
  está	
  conectada.	
  
–  Isto	
  permite	
  que	
  objetos	
  diferentes,	
  de	
  subclasses	
  
disHntas,	
  sejam	
  vistos	
  como	
  objetos	
  de	
  uma	
  mesma	
  
superclasse	
  –	
  o	
  método	
  apropriado	
  a	
  ser	
  executado	
  
será	
  escolhido	
  automaHcamente,	
  baseado	
  na	
  
subclasse	
  que	
  o	
  objeto	
  pertence	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   6	
  
Exemplos	
  de	
  Polimorfismo	
  
•  Sobrecarga	
  de	
  um	
  método	
  
– Mesmo	
  nome,	
  parâmetros	
  diferentes	
  
•  setData(int dia, int mes, int ano);
•  setData(int dia, int mes, int ano, int hora,
int minuto, int segundo);	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   7	
  
Exemplos	
  de	
  Polimorfismo	
  
•  Sobrescrita	
  de	
  um	
  método	
  
– Uma	
  subclasse	
  redefine	
  um	
  comportamento	
  de	
  
sua	
  superclasse	
  
•  umaPessoa.toString();
•  umEmpregado.toString();
•  umGerente.toString();
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   8	
  
Exemplos	
  de	
  Polimorfismo	
  
•  Vinculação	
  dinâmica	
  (ou	
  tardia)	
  
– Dynamic	
  Binding,	
  Late	
  Binding	
  
– O	
  método	
  a	
  ser	
  chamado	
  só	
  pode	
  ser	
  
determinado	
  em	
  tempo	
  de	
  execução	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   9	
  
Vantagens	
  do	
  Polimorfismo	
  
•  Simplicidade	
  
– Quando	
  necessário	
  escrever	
  um	
  código	
  que	
  
manipula	
  uma	
  família	
  de	
  Hpos,	
  o	
  código	
  pode	
  
ignorar	
  detalhes	
  específicos	
  de	
  cada	
  Hpo	
  
– Mesmo	
  que	
  o	
  código	
  aparente	
  estar	
  manipulando	
  
um	
  objeto	
  do	
  Hpo	
  da	
  classe-­‐mãe,	
  o	
  objeto	
  na	
  
verdade	
  pode	
  ser	
  do	
  Hpo	
  da	
  classe-­‐mãe,	
  mas	
  
também	
  do	
  Hpo	
  das	
  classes-­‐filhas	
  
– Isso	
  torna	
  o	
  código	
  mais	
  fácil	
  de	
  se	
  escrever	
  e	
  de	
  
se	
  entender	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   10	
  
Vantagens	
  do	
  Polimorfismo	
  
•  Escalabilidade	
  
– Num	
  momento	
  futuro,	
  outras	
  classes	
  poderão	
  ser	
  
adicionadas	
  à	
  família	
  de	
  Hpos,	
  sendo	
  que	
  os	
  seus	
  
objetos	
  executarão	
  seu	
  código	
  específico.	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   11	
  
Tipos	
  de	
  Polimorfismo	
  
•  Sobrecarga	
  (overloading)	
  
– Ocorre	
  na	
  mesma	
  classe	
  ou	
  entre	
  classe-­‐mãe	
  e	
  
classe-­‐filha	
  
– Os	
  métodos	
  diferem	
  pela	
  assinatura	
  (ordem	
  e	
  
número	
  de	
  parâmetros)	
  
– A	
  escolha	
  do	
  método	
  ocorre	
  em	
  tempo	
  de	
  
compilação	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   12	
  
Tipos	
  de	
  Polimorfismo	
  
•  Sobreposição	
  (overriding):	
  
–  Métodos	
  na	
  classe-­‐filha	
  que	
  redefinem	
  ou	
  sobrepõem	
  
o	
  comportamento	
  do	
  mesmo	
  método	
  da	
  classe-­‐mãe	
  
–  Apresenta	
  mesma	
  lista	
  de	
  parâmetros!	
  
–  Existe	
  também	
  a	
  sobreposição	
  (ou	
  implementação)	
  de	
  
métodos	
  concretos	
  (classe-­‐filha)	
  em	
  métodos	
  
abstratos	
  (classe-­‐mãe	
  ou	
  interface)	
  
–  A	
  escolha	
  do	
  método	
  é	
  feita	
  em	
  tempo	
  de	
  execução	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   13	
  
Métodos	
  Abstrados	
  
•  Métodos	
  declarados	
  sem	
  implementação	
  
– abstract void moveTo(double X, double Y);
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   14	
  
Classes	
  Abstratas	
  
•  São	
  classes	
  em	
  que	
  um	
  ou	
  mais	
  dos	
  métodos	
  
são	
  abstratos:	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   15	
  
public abstract class Animal {
private String nome;
public Animal (String nome){
this.nome = nome;
}
public String getNome(){
return(nome);
}
public abstract void emitirSom();
}
Classes	
  Abstratas	
  
•  Uma	
  classe	
  abstrata	
  declara	
  atributos	
  e	
  
comportamentos	
  comuns	
  das	
  várias	
  classes	
  
em	
  uma	
  hierarquia	
  de	
  classes.	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   16	
  
Classes	
  Abstratas	
  
•  As	
  subclasses	
  devem	
  sobrescrever	
  os	
  métodos	
  
abstratos	
  para	
  se	
  tornarem	
  concretas.	
  
•  As	
  classes	
  abstratas	
  não	
  podem	
  ser	
  
instanciadas.	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   17	
  
Classes	
  Abstratas	
  
public class Vaca extends Animal {
public Vaca(String nome) {
super(nome);
}
public void emitirSom() {
System.out.println("MUUUUUUU");
}
}
	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   18	
  
Classes	
  Abstatas	
  
public class Cachorro extends Animal {
public Cachorro(String nome) {
super(nome);
}
public void emitirSom() {
System.out.println("AUAU");
}
public void rosnar() {
System.out.println("GRRRRRR");
}
}
	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   19	
  
Vinculação	
  Dinâmica	
  
public class AnimalTest {
public static void main(String args[]) {
Animal ref;
Vaca umaVaca = new Vaca("Mimosa");
Cachorro umCachorro = new Cachorro("Rex");
// Referencia cada um como animal
ref = umaVaca;
ref.emitirSom(); // Polimorfismo: Dynamic Binding
ref = umCachorro;
ref.emitirSom(); // Polimorfismo: Dynamic Binding
}
}
	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   20	
  
Vinculação	
  Dinâmica	
  
•  O	
  compilador	
  não	
  sabe	
  qual	
  método	
  deve	
  ser	
  
chamado.	
  
•  Isto	
  é	
  determinado	
  apenas	
  durante	
  a	
  
execução	
  do	
  programa.	
  
Animal []meusBichos = new Animal[20];
...
for(int i=0; i<20; i++){
meusBichos[i].emitirSom();
}
...
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   21	
  
Vinculação	
  Dinâmica	
  
List <Animal> meusBichinhos = new LinkedList
<Animal>();
...
meusBichinhos.add(umCachorro);
meusBichinhos.add(umGato);
meusBichinhos.add(umaVaca);
...
for(Animal bicho: meusBichinhos)
bicho.emitirSom();	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   22	
  
Hierarquia	
  Empregado	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   23	
  
Classe	
  Empregado
•  Superclasse	
  abstract Empregado
– Método	
  ganhos	
  é	
  declarado	
  abstract
•  Nenhuma	
  implementacão	
  pode	
  ser	
  dada	
  à	
  função	
  
ganhos	
  na	
  classe	
  abstract Empregado
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   24	
  
Classe	
  Empregado
public abstract class Empregado {
private String primeiroNome;
private String ultimoNome;
private String rg;
public Empregado(String primeiro, String ultimo, String ident) {
primeiroNome = primeiro;
ultimoNome = ultimo;
rg = ident;
}
}
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   25	
  
Classe	
  Empregado
public String getPrimeiroNome() {
return primeiroNome;
}
public String getUltimoNome() {
return ultimoNome;
}
public String getRG() {
return rg;
}	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   26	
  
Classe	
  Empregado
public void setPrimeiroNome(String primeiro) {
primeiroNome = primeiro;
}
public void setUltimoNome(String ultimo) {
ultimoNome = ultimo;
}
public void setRG(String ident) {
rg = ident;
}
public String toString() {
return String.format("%s %snRG: %s",
getPrimeiroNome(), getUltimoNome(), getRG());
}	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   27	
  
Classe	
  Empregado
/*
* Método abstrato a ser
* sobrescrito pelas subclasses
*/
public abstract double ganhos();	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   28	
  
Classe	
  EmpregadoHorista
public class EmpregadoHorista extends Empregado {
private double valorHora;
private double horas;
public EmpregadoHorista(String primeiro,
String ultimo, String ident, double valor, double horas) {
super(primeiro, ultimo, ident);
setValorHora(valor);
setHoras(horas);
}
}	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   29	
  
Classe	
  EmpregadoHorista
public void setValorHora(double valor){
valorHora = valor;
}
public void setHoras(double horasTrabalhadas){
horas = horasTrabalhadas;
}
public double getHoras(){
return horas;
}
public double getValorHora(){
return valorHora;
}	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   30	
  
Classe	
  EmpregadoHorista
// Implementando o método ganhos
public double ganhos() {
if (getHoras() <= 40) {
return getValorHora() * getHoras();
} else {
return (getHoras() - 40) * getValorHora() * 1.5;
}
}	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   31	
  
Classe	
  EmpregadoAssalariado
public class EmpregadoAssalariado extends Empregado {
private double salarioSemanal;
public EmpregadoAssalariado(String primeiro, String ultimo,
String ident, double salario) {
super(primeiro, ultimo, ident);
setSalarioSemanal(salario);
}
public double ganhos() {
return getSalarioSemanal();
}
	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   32	
  
Classe	
  EmpregadoAssalariado
public void setSalarioSemanal(double salario) {
salarioSemanal = salario;
}
public double getSalarioSemanal() {
return salarioSemanal;
}	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   33	
  
Classe	
  EmpregadoPorComissao
public class EmpregadoPorComissao extends Empregado{
private double vendasBrutas;
private double taxaComissao;
public EmpregadoPorComissao(String primeiro, String ultimo, String ident,
double vendas, double comissao){
super(primeiro, ultimo, ident);
setVendasBrutas(vendas);
setTaxaComissao(comissao);
}
public double ganhos(){
return getTaxaComissao() * getVendasBrutas();
}
}	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   34	
  
Classe	
  EmpregadoPorComissao
public void setVendasBrutas(double vendas){
vendasBrutas = vendas;
}
public void setTaxaComissao(double comissao){
taxaComissao = comissao;
}
public double getTaxaComissao(){
return taxaComissao;
}
public double getVendasBrutas(){
return vendasBrutas;
}	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   35	
  
Classe	
  EmpregadoFixoMaisComissao
public class EmpregadoFixoMaisComissao extends
EmpregadoPorComissao {
private double salarioBase;
public EmpregadoFixoMaisComissao(String primeiro, String ultimo,
String ident, double vendas, double comissao, double salario) {
super(primeiro, ultimo, ident, vendas, comissao);
setSalarioBase(salario);
}
public double ganhos() {
return getSalarioBase() + super.ganhos();
}
}	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   36	
  
Classe	
  EmpregadoFixoMaisComissao
public void setSalarioBase(double salario) {
salarioBase = salario;
}
public double getSalarioBase() {
return salarioBase;
}	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   37	
  
Processamento	
  Polimórfico	
  
•  Vinculação	
  Dinâmica	
  
– Também	
  conhecida	
  como	
  Vinculação	
  Tardia	
  
– Chamadas	
  aos	
  métodos	
  sobrescritos,	
  são	
  
resolvidas	
  em	
  tempo	
  de	
  execução,	
  com	
  base	
  no	
  
Hpo	
  de	
  objeto	
  referenciado	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   38	
  
Operador	
  instanceof
•  Determina	
  se	
  um	
  objeto	
  é	
  uma	
  instância	
  de	
  
um	
  certo	
  Hpo.	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   39	
  
A	
  Classe	
  Class
•  Método	
  getClass()
– Herdado	
  de	
  Object
– Retorna	
  um	
  objeto	
  do	
  Hpo	
  Class
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   40	
  
A	
  Classe	
  Class
•  Método	
  getName()
– Retorna	
  o	
  nome	
  da	
  classe:	
  
public static void main(String args[]) {
Object anObject = new Object();
Class aClass;
String aString, anotherString;
aClass = anObject.getClass();
aString = aClass.getName();
anotherString = anObject.getClass().getName();
}	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   41	
  
A	
  Classe	
  Class
import java.util.ArrayList;
import java.util.Vector;
public class VectorClass {
public static void main(String args[]) {
Object testObject = new Vector();
if (testObject instanceof Vector) {
System.out.println("Instance of the class java.util.Vector");
}
else if (testObject instanceof ArrayList) {
System.out.println("Instance of the class java.util.ArrayList");
}
else {
System.out.println("Instance of the classs " + testObject.getClass());
}
}
}
	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   42	
  
Exemplo	
  de	
  Polimorfismo	
  
public static void main(String args[]) {
Empregado empregados[] = new Empregado[4];
EmpregadoAssalariado empregadoAssalariado =
new EmpregadoAssalariado("João", "Silva", "1837-1", 1500);
empregados[0] = empregadoAssalariado;
EmpregadoHorista empregadoHorista =
new EmpregadoHorista("Maria", "Santos", "4857-3", 0, 40);
empregados[1]= empregadoHorista;
EmpregadoPorComissao empregadoComissionista =
new EmpregadoPorComissao("Joana", "Fernandes", "5773-8",
50, 40);
empregados[2] = empregadoComissionista;
EmpregadoFixoMaisComissao empregadoComissao =
new EmpregadoFixoMaisComissao("Roberto", "Antunes",
"4857-3", 50, 40, 300);
empregados[3] = empregadoComissao;	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   43	
  
Exemplo	
  de	
  Polimorfismo	
  
•  Vinculação	
  Tardia	
  –	
  Late	
  Binding	
  
for(Empregado empregadoAtual:empregados){
// chama a função toString()
System.out.println(empregadoAtual);
// mostra os ganhos
System.out.printf("ganhou $%,.2fnn",
empregadoAtual.ganhos());
}	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   44	
  
CasHng	
  
•  Cast:	
  converter	
  de	
  um	
  Hpo	
  de	
  dados	
  para	
  
outro	
  
int i = 20;
double x = 2.5;
x = (double) i;	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   45	
  
Conversão	
  de	
  Tipos	
  
Tipo	
  
Tamanho	
  
(bits)	
  
Valores	
  
char	
   16	
   'u0000'	
  a	
  'uFFFF'	
  
byte	
   8	
   -­‐128	
  a	
  127	
  
int	
   32	
   -­‐2.147.483.648	
  a	
  -­‐2.147.483.647	
  
short	
   16	
   -­‐32.768	
  a	
  +32.767	
  
long	
   64	
   -­‐9.223.372.036.854.775.808	
  a	
  
+9.223.372.036.854.775.807	
  
float	
   32	
   -­‐3,40292347E+38	
  a	
  +3,40292347E+38	
  
double	
   64	
   -­‐1,79769313486231570E+308	
  a	
  
+1,79769313486231570E+308	
  
boolean	
   8	
   true	
  ou	
  false	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   46	
  
Conversão	
  de	
  Tipos	
  
Supondo	
  a	
  variável	
  x	
   Converter	
  em	
   A	
  variável	
  y	
  recebe	
  o	
  valor	
  conver<do	
  
int x = 30	
   float	
   float y = (float) x	
  
int x = 30	
   double	
   double y = (double) x	
  
float x = 20.5	
   int	
   int y = (int) x	
  
String x = "20"	
   int	
   int y = Integer.parseInt(x)	
  
String x = "40.84"	
   float	
   float y = Float.parseFloat(x)	
  
String x = "40.84"	
   double	
   double y = Double.parseDouble(x)	
  
String x = "Java"	
   Vetor	
  de	
  bytes	
   byte y[] = x.getBytes()	
  
int x = 30	
   String	
   String y = String.valueOf(x)	
  
float x = 20.5	
   String	
   String y = String.valueOf(x)	
  
double x = 452.43	
   String	
   String y = String.valueOf(x)	
  
byte x[]	
   String	
   String y = new String(x)	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   47	
  
CasHng	
  
•  Upcast:	
  converter	
  sem	
  perda	
  de	
  informação	
  
int i = 20;
double x = 2.5;
x = (double) i;	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   48	
  
CasHng	
  
•  Downcast:	
  converer	
  com	
  perda	
  de	
  informação	
  
int i = 20;
double x = 2.5;
i = (int) x;	
  
•  Java	
  warning:	
  Possible	
  loss	
  of	
  precision	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   49	
  
CasHng	
  
•  Cast:	
  conversão	
  dentro	
  de	
  uma	
  hierarquia	
  de	
  
classes	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   50	
  
CasHng	
  
•  Upcast:	
  subir	
  na	
  hierarquia	
  
– EmpregadoPorComissao -> Empregado
– EmpregadoFixoMaisComissao ->
EmpregadoPorComissao
•  Downcast:	
  descer	
  na	
  hierarquia	
  
– EmpregadoPorComissao ->
EmpregadoFixoMaisComissao
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   51	
  
CasHng	
  
•  Superclasse <- Superclasse
•  Subclasse <- Subclasse
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   52	
  
CasHng	
  
•  Superclasse	
  <-­‐	
  Subclasse	
  
– Upcast	
  ocorre	
  implicitamente	
  
Animal umAnimal = new Animal("Bixo");
Cachorro umCachorro = new Cachorro("Rambo");
umAnimal = umCachorro;
umAnimal.rosnar();
– Referenciar	
  membros	
  exclusivos	
  de	
  subclasses	
  a	
  
parHr	
  da	
  superclasse	
  gera	
  um	
  erro	
  de	
  compilação.	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   53	
  
CasHng	
  
•  Subclasse	
  <-­‐	
  Superclasse	
  
– Erro	
  de	
  compilação	
  
umCachorro	
  =	
  umAnimal;	
  
– O	
  downcasHng	
  explicito	
  pode	
  evitar	
  este	
  erro	
  
umCachorro	
  =	
  (Cachorro)umAnimal;	
  
– Porém,	
  gera	
  uma	
  ClassCastException	
  (em	
  
tempo	
  de	
  execução)	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   54	
  
CasHng	
  
•  Antes	
  de	
  realizar	
  esta	
  coerção,	
  uHlizar	
  o	
  
operador	
  instanceof,	
  para	
  assegurar	
  que	
  
o	
  objeto	
  é	
  de	
  fato	
  um	
  objeto	
  de	
  um	
  Hpo	
  de	
  
subclasse	
  apropriado.	
  
if(umAnimal instanceof Cachorro)
umCachorro = (Cachorro)umAnimal;	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   55	
  
Métodos	
  final
•  Não	
  podem	
  ser	
  sobrescritos	
  em	
  uma	
  
subclasse	
  
•  Métodos	
  private	
  e	
  static	
  são	
  
implicitamente	
  final
•  Métodos	
  final	
  são	
  resolvidos	
  em	
  tempo	
  de	
  
compilação,	
  isto	
  é	
  conhecido	
  como	
  vinculação	
  
estáHca.	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   56	
  
Classes	
  final
•  Não	
  podem	
  ser	
  estendidas	
  por	
  uma	
  subclasse	
  
•  Todos	
  os	
  métodos	
  em	
  uma	
  classe	
  final	
  são	
  
implicitamente	
  final
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   57	
  
Polimorfismo	
   58	
  Daniel	
  Arndt	
  Alves	
  
Polimorfismo	
   59	
  Daniel	
  Arndt	
  Alves	
  
Imagens	
  
•  htp://www.goldb.org/goldblog/cmg_images/
real_programmers_binary.jpg	
  	
  
•  htp://sandersconsulHng.com/Portals/58319/
images/checklist.jpg	
  	
  
Daniel	
  Arndt	
  Alves	
   Polimorfismo	
   60	
  
Obrigado	
  
	
  
Daniel	
  Arndt	
  Alves	
  
	
  
htp://www.progdan.pro.br/	
  	
  
daniel.alves@mackenzie.br	
  
progdan@progdan.pro.br	
  	
  
Polimorfismo	
   61	
  Daniel	
  Arndt	
  Alves	
  

Contenu connexe

Tendances

Psi-mod-15
Psi-mod-15Psi-mod-15
Psi-mod-15diogoa21
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosLudimila Monjardim Casagrande
 
Polimorfismo em java
Polimorfismo em javaPolimorfismo em java
Polimorfismo em javaManoel Afonso
 
Algoritmo Variaveis
Algoritmo   VariaveisAlgoritmo   Variaveis
Algoritmo VariaveisAndré Nobre
 
Herança e polimorfismo em Java
Herança e polimorfismo em Java Herança e polimorfismo em Java
Herança e polimorfismo em Java Evandro Júnior
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a pooSedu
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosLudimila Monjardim Casagrande
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPDaniel Brandão
 

Tendances (20)

Algoritmo 06 - Array e Matrizes
Algoritmo 06 - Array e MatrizesAlgoritmo 06 - Array e Matrizes
Algoritmo 06 - Array e Matrizes
 
Psi-mod-15
Psi-mod-15Psi-mod-15
Psi-mod-15
 
POO - Aula 09 - Herança
POO - Aula 09 - HerançaPOO - Aula 09 - Herança
POO - Aula 09 - Herança
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
Polimorfismo em java
Polimorfismo em javaPolimorfismo em java
Polimorfismo em java
 
Algoritmo Variaveis
Algoritmo   VariaveisAlgoritmo   Variaveis
Algoritmo Variaveis
 
Python Orientação a Objeto
Python Orientação a ObjetoPython Orientação a Objeto
Python Orientação a Objeto
 
Herança e polimorfismo em Java
Herança e polimorfismo em Java Herança e polimorfismo em Java
Herança e polimorfismo em Java
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a poo
 
Classes abstratas e interfaces
Classes abstratas e interfacesClasses abstratas e interfaces
Classes abstratas e interfaces
 
POO - 16 - Polimorfismo
POO - 16 - PolimorfismoPOO - 16 - Polimorfismo
POO - 16 - Polimorfismo
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
 
Algoritmo aula 01-f
Algoritmo   aula 01-fAlgoritmo   aula 01-f
Algoritmo aula 01-f
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
Introdução à linguagem python
Introdução à linguagem pythonIntrodução à linguagem python
Introdução à linguagem python
 

En vedette

Histórico de Participação do Mackenzie na Maratona de Programação
Histórico de Participação do Mackenzie na Maratona de ProgramaçãoHistórico de Participação do Mackenzie na Maratona de Programação
Histórico de Participação do Mackenzie na Maratona de ProgramaçãoDaniel Arndt Alves
 
Modelos de Integração Moodle - Sistemas de Gestão Acadêmicos e Administrativos
Modelos de Integração Moodle - Sistemas de Gestão Acadêmicos e AdministrativosModelos de Integração Moodle - Sistemas de Gestão Acadêmicos e Administrativos
Modelos de Integração Moodle - Sistemas de Gestão Acadêmicos e AdministrativosDaniel Arndt Alves
 
Java Platform, Enterprise Edition
Java Platform, Enterprise EditionJava Platform, Enterprise Edition
Java Platform, Enterprise EditionDaniel Arndt Alves
 
Palestra Flisol 2012 - Campinas
Palestra Flisol 2012 - CampinasPalestra Flisol 2012 - Campinas
Palestra Flisol 2012 - CampinasAnderson de Castro
 
Strings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHPStrings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHPDaniel Arndt Alves
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01joaocarlobarros
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHPCezar Souza
 
Cookies e Sessões e PHP
Cookies e Sessões e PHPCookies e Sessões e PHP
Cookies e Sessões e PHPHumberto Moura
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONAmbiente Livre
 
Web Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAPWeb Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAPElwin Huaman
 

En vedette (20)

Insertion Sort
Insertion SortInsertion Sort
Insertion Sort
 
Sessao
SessaoSessao
Sessao
 
Histórico de Participação do Mackenzie na Maratona de Programação
Histórico de Participação do Mackenzie na Maratona de ProgramaçãoHistórico de Participação do Mackenzie na Maratona de Programação
Histórico de Participação do Mackenzie na Maratona de Programação
 
Variaveis Superglobais
Variaveis SuperglobaisVariaveis Superglobais
Variaveis Superglobais
 
Modelos de Integração Moodle - Sistemas de Gestão Acadêmicos e Administrativos
Modelos de Integração Moodle - Sistemas de Gestão Acadêmicos e AdministrativosModelos de Integração Moodle - Sistemas de Gestão Acadêmicos e Administrativos
Modelos de Integração Moodle - Sistemas de Gestão Acadêmicos e Administrativos
 
Java Platform, Enterprise Edition
Java Platform, Enterprise EditionJava Platform, Enterprise Edition
Java Platform, Enterprise Edition
 
Java AWT
Java AWTJava AWT
Java AWT
 
Java RMI
Java RMIJava RMI
Java RMI
 
Hiearquia Window
Hiearquia WindowHiearquia Window
Hiearquia Window
 
Palestra Flisol 2012 - Campinas
Palestra Flisol 2012 - CampinasPalestra Flisol 2012 - Campinas
Palestra Flisol 2012 - Campinas
 
Strings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHPStrings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHP
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01
 
Slides
SlidesSlides
Slides
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHP
 
Php 05 Mvc
Php 05 MvcPhp 05 Mvc
Php 05 Mvc
 
Cookies e Sessões e PHP
Cookies e Sessões e PHPCookies e Sessões e PHP
Cookies e Sessões e PHP
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
 
Aula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHPAula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHP
 
Desenvolvimento Mobile Web usando PHP
Desenvolvimento Mobile Web usando PHPDesenvolvimento Mobile Web usando PHP
Desenvolvimento Mobile Web usando PHP
 
Web Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAPWeb Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAP
 

Similaire à Polimorfismo Java Mackenzie

Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1Filipo Mór
 
Aula 3 introducao a orientação a objetos
Aula 3   introducao a orientação a objetosAula 3   introducao a orientação a objetos
Aula 3 introducao a orientação a objetosRafael Pinheiro
 
Fundamentos da Programação PHP OO - Aula 2
Fundamentos da Programação PHP OO - Aula 2Fundamentos da Programação PHP OO - Aula 2
Fundamentos da Programação PHP OO - Aula 2Thyago Maia
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosDaniel Brandão
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLGeorge Mendonça
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com javaMaurício Linhares
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Sérgio Souza Costa
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...Manuel Menezes de Sequeira
 
Java: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceJava: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceArthur Emanuel
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Thyago Maia
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 

Similaire à Polimorfismo Java Mackenzie (20)

Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
Aula 3 introducao a orientação a objetos
Aula 3   introducao a orientação a objetosAula 3   introducao a orientação a objetos
Aula 3 introducao a orientação a objetos
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
Fundamentos da Programação PHP OO - Aula 2
Fundamentos da Programação PHP OO - Aula 2Fundamentos da Programação PHP OO - Aula 2
Fundamentos da Programação PHP OO - Aula 2
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSL
 
Java primeiros-passos
Java primeiros-passosJava primeiros-passos
Java primeiros-passos
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
Active record
Active recordActive record
Active record
 
Java: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceJava: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, Interface
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 
Herança
HerançaHerança
Herança
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Aula 3.ppt
Aula 3.pptAula 3.ppt
Aula 3.ppt
 
Fj pratica04
Fj pratica04Fj pratica04
Fj pratica04
 

Plus de Daniel Arndt Alves

Conceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosConceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosDaniel Arndt Alves
 
Exercicios - Java Swing Listeners
Exercicios - Java Swing ListenersExercicios - Java Swing Listeners
Exercicios - Java Swing ListenersDaniel Arndt Alves
 
Estrutura de Dados II - Plano de Ensino
Estrutura de Dados II - Plano de EnsinoEstrutura de Dados II - Plano de Ensino
Estrutura de Dados II - Plano de EnsinoDaniel Arndt Alves
 
Estrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da DisciplinaEstrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da DisciplinaDaniel Arndt Alves
 
Técnicas de Programação Aplicada III - Apresentação da Disciplina
Técnicas de Programação Aplicada III - Apresentação da DisciplinaTécnicas de Programação Aplicada III - Apresentação da Disciplina
Técnicas de Programação Aplicada III - Apresentação da DisciplinaDaniel Arndt Alves
 
Técnicas de Programação Aplicada III - Plano de Ensino
Técnicas de Programação Aplicada III - Plano de EnsinoTécnicas de Programação Aplicada III - Plano de Ensino
Técnicas de Programação Aplicada III - Plano de EnsinoDaniel Arndt Alves
 
Linguagem de Programação II - Plano de Ensino
Linguagem de Programação II - Plano de EnsinoLinguagem de Programação II - Plano de Ensino
Linguagem de Programação II - Plano de EnsinoDaniel Arndt Alves
 
Linguagem de Programação II - Apresentação da Disciplina
Linguagem de Programação II - Apresentação da DisciplinaLinguagem de Programação II - Apresentação da Disciplina
Linguagem de Programação II - Apresentação da DisciplinaDaniel Arndt Alves
 
Novos Recursos do Moodle 2.0 (Paper)
Novos Recursos do Moodle 2.0 (Paper)Novos Recursos do Moodle 2.0 (Paper)
Novos Recursos do Moodle 2.0 (Paper)Daniel Arndt Alves
 

Plus de Daniel Arndt Alves (20)

Programacao Modular
Programacao ModularProgramacao Modular
Programacao Modular
 
Introducao ao PHP
Introducao ao PHPIntroducao ao PHP
Introducao ao PHP
 
Arquitetura web
Arquitetura webArquitetura web
Arquitetura web
 
HTML Básico
HTML BásicoHTML Básico
HTML Básico
 
Selection Sort
Selection SortSelection Sort
Selection Sort
 
Bubble Sort
Bubble SortBubble Sort
Bubble Sort
 
Análise de Algoritmos
Análise de AlgoritmosAnálise de Algoritmos
Análise de Algoritmos
 
Conceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosConceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos Distribuidos
 
Exercicios - Java Swing Listeners
Exercicios - Java Swing ListenersExercicios - Java Swing Listeners
Exercicios - Java Swing Listeners
 
Gerenciadores de Layout
Gerenciadores de LayoutGerenciadores de Layout
Gerenciadores de Layout
 
Exercicios - Java Swing
Exercicios - Java SwingExercicios - Java Swing
Exercicios - Java Swing
 
Java Swing
Java SwingJava Swing
Java Swing
 
Estrutura de Dados II - Plano de Ensino
Estrutura de Dados II - Plano de EnsinoEstrutura de Dados II - Plano de Ensino
Estrutura de Dados II - Plano de Ensino
 
Estrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da DisciplinaEstrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da Disciplina
 
Técnicas de Programação Aplicada III - Apresentação da Disciplina
Técnicas de Programação Aplicada III - Apresentação da DisciplinaTécnicas de Programação Aplicada III - Apresentação da Disciplina
Técnicas de Programação Aplicada III - Apresentação da Disciplina
 
Técnicas de Programação Aplicada III - Plano de Ensino
Técnicas de Programação Aplicada III - Plano de EnsinoTécnicas de Programação Aplicada III - Plano de Ensino
Técnicas de Programação Aplicada III - Plano de Ensino
 
Linguagem de Programação II - Plano de Ensino
Linguagem de Programação II - Plano de EnsinoLinguagem de Programação II - Plano de Ensino
Linguagem de Programação II - Plano de Ensino
 
Linguagem de Programação II - Apresentação da Disciplina
Linguagem de Programação II - Apresentação da DisciplinaLinguagem de Programação II - Apresentação da Disciplina
Linguagem de Programação II - Apresentação da Disciplina
 
Novos Recursos do Moodle 2
Novos Recursos do Moodle 2Novos Recursos do Moodle 2
Novos Recursos do Moodle 2
 
Novos Recursos do Moodle 2.0 (Paper)
Novos Recursos do Moodle 2.0 (Paper)Novos Recursos do Moodle 2.0 (Paper)
Novos Recursos do Moodle 2.0 (Paper)
 

Dernier

A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.silves15
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinhaMary Alvarenga
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBAline Santana
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfManuais Formação
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Recurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de PartículasRecurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de PartículasCasa Ciências
 
Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.keislayyovera123
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -Aline Santana
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxOsnilReis1
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?Rosalina Simão Nunes
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasCassio Meira Jr.
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
Orações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxOrações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxKtiaOliveira68
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxleandropereira983288
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMVanessaCavalcante37
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 

Dernier (20)

A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinha
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdf
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
 
Recurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de PartículasRecurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de Partículas
 
Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades Motoras
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
Orações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxOrações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptx
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptx
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 

Polimorfismo Java Mackenzie

  • 1. Universidade Presbiteriana Mackenzie   Aula  4:  Polimorfismo   Prof. Ms. Daniel Arndt Alves Faculdade  de  Computação  e  Informá<ca   Computação e Informática Faculdade de Linguagem  de   Programação  II   Polimorfismo   1  Daniel  Arndt  Alves  
  • 2. Tópicos  da  Aula   •  Polimorfismo   – Exemplos  de  Polimorfismo   – Vantagens  do  Polimorfismo   – Tipos  de  Polimorfismo   •  Métodos  Abstratos   •  Classes  Abstratas   •  Vinculação  Dinâmica   Polimorfismo   2  Daniel  Arndt  Alves  
  • 3. Tópicos  da  Aula   •  Hierarquia  Empregado – Classe  Empregado – Classe  EmpregadoHorista – Classe  EmpregadoPorComissao – Classe  EmpregadoFixoMaisComissao •  Processamento  Polimórfico   – Operador  instanceof – A  Classe  Class Polimorfismo   3  Daniel  Arndt  Alves  
  • 4. Tópicos  da  Aula   •  Exemplo  de  Polimorfismo   •  CasHng   – Cast   – Upcast   – Downcast   •  Métodos  Final •  Classes  Final Polimorfismo   4  Daniel  Arndt  Alves  
  • 5. Polimorfismo   •  Permite  que  um  método  produza  resultados   diferentes,  dependendo  do  objeto  ao  qual  é   aplicado.   •  A  mesma  invocação  pode  produzir  “muitas   formas”  de  resultados.   Daniel  Arndt  Alves   Polimorfismo   5  
  • 6. Polimorfismo   •  Um  nome  para  várias  formas,  ou  ainda,  um  nome   e  várias  implementações  (vários  métodos  com  o   mesmo  nome).   •  Capacidade  de  uma  referência  de  variável  mudar   seu  comportamento  de  acordo  com  o  objeto  a   que  ela  está  conectada.   –  Isto  permite  que  objetos  diferentes,  de  subclasses   disHntas,  sejam  vistos  como  objetos  de  uma  mesma   superclasse  –  o  método  apropriado  a  ser  executado   será  escolhido  automaHcamente,  baseado  na   subclasse  que  o  objeto  pertence   Daniel  Arndt  Alves   Polimorfismo   6  
  • 7. Exemplos  de  Polimorfismo   •  Sobrecarga  de  um  método   – Mesmo  nome,  parâmetros  diferentes   •  setData(int dia, int mes, int ano); •  setData(int dia, int mes, int ano, int hora, int minuto, int segundo);   Daniel  Arndt  Alves   Polimorfismo   7  
  • 8. Exemplos  de  Polimorfismo   •  Sobrescrita  de  um  método   – Uma  subclasse  redefine  um  comportamento  de   sua  superclasse   •  umaPessoa.toString(); •  umEmpregado.toString(); •  umGerente.toString(); Daniel  Arndt  Alves   Polimorfismo   8  
  • 9. Exemplos  de  Polimorfismo   •  Vinculação  dinâmica  (ou  tardia)   – Dynamic  Binding,  Late  Binding   – O  método  a  ser  chamado  só  pode  ser   determinado  em  tempo  de  execução   Daniel  Arndt  Alves   Polimorfismo   9  
  • 10. Vantagens  do  Polimorfismo   •  Simplicidade   – Quando  necessário  escrever  um  código  que   manipula  uma  família  de  Hpos,  o  código  pode   ignorar  detalhes  específicos  de  cada  Hpo   – Mesmo  que  o  código  aparente  estar  manipulando   um  objeto  do  Hpo  da  classe-­‐mãe,  o  objeto  na   verdade  pode  ser  do  Hpo  da  classe-­‐mãe,  mas   também  do  Hpo  das  classes-­‐filhas   – Isso  torna  o  código  mais  fácil  de  se  escrever  e  de   se  entender   Daniel  Arndt  Alves   Polimorfismo   10  
  • 11. Vantagens  do  Polimorfismo   •  Escalabilidade   – Num  momento  futuro,  outras  classes  poderão  ser   adicionadas  à  família  de  Hpos,  sendo  que  os  seus   objetos  executarão  seu  código  específico.   Daniel  Arndt  Alves   Polimorfismo   11  
  • 12. Tipos  de  Polimorfismo   •  Sobrecarga  (overloading)   – Ocorre  na  mesma  classe  ou  entre  classe-­‐mãe  e   classe-­‐filha   – Os  métodos  diferem  pela  assinatura  (ordem  e   número  de  parâmetros)   – A  escolha  do  método  ocorre  em  tempo  de   compilação   Daniel  Arndt  Alves   Polimorfismo   12  
  • 13. Tipos  de  Polimorfismo   •  Sobreposição  (overriding):   –  Métodos  na  classe-­‐filha  que  redefinem  ou  sobrepõem   o  comportamento  do  mesmo  método  da  classe-­‐mãe   –  Apresenta  mesma  lista  de  parâmetros!   –  Existe  também  a  sobreposição  (ou  implementação)  de   métodos  concretos  (classe-­‐filha)  em  métodos   abstratos  (classe-­‐mãe  ou  interface)   –  A  escolha  do  método  é  feita  em  tempo  de  execução   Daniel  Arndt  Alves   Polimorfismo   13  
  • 14. Métodos  Abstrados   •  Métodos  declarados  sem  implementação   – abstract void moveTo(double X, double Y); Daniel  Arndt  Alves   Polimorfismo   14  
  • 15. Classes  Abstratas   •  São  classes  em  que  um  ou  mais  dos  métodos   são  abstratos:   Daniel  Arndt  Alves   Polimorfismo   15   public abstract class Animal { private String nome; public Animal (String nome){ this.nome = nome; } public String getNome(){ return(nome); } public abstract void emitirSom(); }
  • 16. Classes  Abstratas   •  Uma  classe  abstrata  declara  atributos  e   comportamentos  comuns  das  várias  classes   em  uma  hierarquia  de  classes.   Daniel  Arndt  Alves   Polimorfismo   16  
  • 17. Classes  Abstratas   •  As  subclasses  devem  sobrescrever  os  métodos   abstratos  para  se  tornarem  concretas.   •  As  classes  abstratas  não  podem  ser   instanciadas.   Daniel  Arndt  Alves   Polimorfismo   17  
  • 18. Classes  Abstratas   public class Vaca extends Animal { public Vaca(String nome) { super(nome); } public void emitirSom() { System.out.println("MUUUUUUU"); } }   Daniel  Arndt  Alves   Polimorfismo   18  
  • 19. Classes  Abstatas   public class Cachorro extends Animal { public Cachorro(String nome) { super(nome); } public void emitirSom() { System.out.println("AUAU"); } public void rosnar() { System.out.println("GRRRRRR"); } }   Daniel  Arndt  Alves   Polimorfismo   19  
  • 20. Vinculação  Dinâmica   public class AnimalTest { public static void main(String args[]) { Animal ref; Vaca umaVaca = new Vaca("Mimosa"); Cachorro umCachorro = new Cachorro("Rex"); // Referencia cada um como animal ref = umaVaca; ref.emitirSom(); // Polimorfismo: Dynamic Binding ref = umCachorro; ref.emitirSom(); // Polimorfismo: Dynamic Binding } }   Daniel  Arndt  Alves   Polimorfismo   20  
  • 21. Vinculação  Dinâmica   •  O  compilador  não  sabe  qual  método  deve  ser   chamado.   •  Isto  é  determinado  apenas  durante  a   execução  do  programa.   Animal []meusBichos = new Animal[20]; ... for(int i=0; i<20; i++){ meusBichos[i].emitirSom(); } ... Daniel  Arndt  Alves   Polimorfismo   21  
  • 22. Vinculação  Dinâmica   List <Animal> meusBichinhos = new LinkedList <Animal>(); ... meusBichinhos.add(umCachorro); meusBichinhos.add(umGato); meusBichinhos.add(umaVaca); ... for(Animal bicho: meusBichinhos) bicho.emitirSom();   Daniel  Arndt  Alves   Polimorfismo   22  
  • 23. Hierarquia  Empregado   Daniel  Arndt  Alves   Polimorfismo   23  
  • 24. Classe  Empregado •  Superclasse  abstract Empregado – Método  ganhos  é  declarado  abstract •  Nenhuma  implementacão  pode  ser  dada  à  função   ganhos  na  classe  abstract Empregado Daniel  Arndt  Alves   Polimorfismo   24  
  • 25. Classe  Empregado public abstract class Empregado { private String primeiroNome; private String ultimoNome; private String rg; public Empregado(String primeiro, String ultimo, String ident) { primeiroNome = primeiro; ultimoNome = ultimo; rg = ident; } } Daniel  Arndt  Alves   Polimorfismo   25  
  • 26. Classe  Empregado public String getPrimeiroNome() { return primeiroNome; } public String getUltimoNome() { return ultimoNome; } public String getRG() { return rg; }   Daniel  Arndt  Alves   Polimorfismo   26  
  • 27. Classe  Empregado public void setPrimeiroNome(String primeiro) { primeiroNome = primeiro; } public void setUltimoNome(String ultimo) { ultimoNome = ultimo; } public void setRG(String ident) { rg = ident; } public String toString() { return String.format("%s %snRG: %s", getPrimeiroNome(), getUltimoNome(), getRG()); }   Daniel  Arndt  Alves   Polimorfismo   27  
  • 28. Classe  Empregado /* * Método abstrato a ser * sobrescrito pelas subclasses */ public abstract double ganhos();   Daniel  Arndt  Alves   Polimorfismo   28  
  • 29. Classe  EmpregadoHorista public class EmpregadoHorista extends Empregado { private double valorHora; private double horas; public EmpregadoHorista(String primeiro, String ultimo, String ident, double valor, double horas) { super(primeiro, ultimo, ident); setValorHora(valor); setHoras(horas); } }   Daniel  Arndt  Alves   Polimorfismo   29  
  • 30. Classe  EmpregadoHorista public void setValorHora(double valor){ valorHora = valor; } public void setHoras(double horasTrabalhadas){ horas = horasTrabalhadas; } public double getHoras(){ return horas; } public double getValorHora(){ return valorHora; }   Daniel  Arndt  Alves   Polimorfismo   30  
  • 31. Classe  EmpregadoHorista // Implementando o método ganhos public double ganhos() { if (getHoras() <= 40) { return getValorHora() * getHoras(); } else { return (getHoras() - 40) * getValorHora() * 1.5; } }   Daniel  Arndt  Alves   Polimorfismo   31  
  • 32. Classe  EmpregadoAssalariado public class EmpregadoAssalariado extends Empregado { private double salarioSemanal; public EmpregadoAssalariado(String primeiro, String ultimo, String ident, double salario) { super(primeiro, ultimo, ident); setSalarioSemanal(salario); } public double ganhos() { return getSalarioSemanal(); }   Daniel  Arndt  Alves   Polimorfismo   32  
  • 33. Classe  EmpregadoAssalariado public void setSalarioSemanal(double salario) { salarioSemanal = salario; } public double getSalarioSemanal() { return salarioSemanal; }   Daniel  Arndt  Alves   Polimorfismo   33  
  • 34. Classe  EmpregadoPorComissao public class EmpregadoPorComissao extends Empregado{ private double vendasBrutas; private double taxaComissao; public EmpregadoPorComissao(String primeiro, String ultimo, String ident, double vendas, double comissao){ super(primeiro, ultimo, ident); setVendasBrutas(vendas); setTaxaComissao(comissao); } public double ganhos(){ return getTaxaComissao() * getVendasBrutas(); } }   Daniel  Arndt  Alves   Polimorfismo   34  
  • 35. Classe  EmpregadoPorComissao public void setVendasBrutas(double vendas){ vendasBrutas = vendas; } public void setTaxaComissao(double comissao){ taxaComissao = comissao; } public double getTaxaComissao(){ return taxaComissao; } public double getVendasBrutas(){ return vendasBrutas; }   Daniel  Arndt  Alves   Polimorfismo   35  
  • 36. Classe  EmpregadoFixoMaisComissao public class EmpregadoFixoMaisComissao extends EmpregadoPorComissao { private double salarioBase; public EmpregadoFixoMaisComissao(String primeiro, String ultimo, String ident, double vendas, double comissao, double salario) { super(primeiro, ultimo, ident, vendas, comissao); setSalarioBase(salario); } public double ganhos() { return getSalarioBase() + super.ganhos(); } }   Daniel  Arndt  Alves   Polimorfismo   36  
  • 37. Classe  EmpregadoFixoMaisComissao public void setSalarioBase(double salario) { salarioBase = salario; } public double getSalarioBase() { return salarioBase; }   Daniel  Arndt  Alves   Polimorfismo   37  
  • 38. Processamento  Polimórfico   •  Vinculação  Dinâmica   – Também  conhecida  como  Vinculação  Tardia   – Chamadas  aos  métodos  sobrescritos,  são   resolvidas  em  tempo  de  execução,  com  base  no   Hpo  de  objeto  referenciado   Daniel  Arndt  Alves   Polimorfismo   38  
  • 39. Operador  instanceof •  Determina  se  um  objeto  é  uma  instância  de   um  certo  Hpo.   Daniel  Arndt  Alves   Polimorfismo   39  
  • 40. A  Classe  Class •  Método  getClass() – Herdado  de  Object – Retorna  um  objeto  do  Hpo  Class Daniel  Arndt  Alves   Polimorfismo   40  
  • 41. A  Classe  Class •  Método  getName() – Retorna  o  nome  da  classe:   public static void main(String args[]) { Object anObject = new Object(); Class aClass; String aString, anotherString; aClass = anObject.getClass(); aString = aClass.getName(); anotherString = anObject.getClass().getName(); }   Daniel  Arndt  Alves   Polimorfismo   41  
  • 42. A  Classe  Class import java.util.ArrayList; import java.util.Vector; public class VectorClass { public static void main(String args[]) { Object testObject = new Vector(); if (testObject instanceof Vector) { System.out.println("Instance of the class java.util.Vector"); } else if (testObject instanceof ArrayList) { System.out.println("Instance of the class java.util.ArrayList"); } else { System.out.println("Instance of the classs " + testObject.getClass()); } } }   Daniel  Arndt  Alves   Polimorfismo   42  
  • 43. Exemplo  de  Polimorfismo   public static void main(String args[]) { Empregado empregados[] = new Empregado[4]; EmpregadoAssalariado empregadoAssalariado = new EmpregadoAssalariado("João", "Silva", "1837-1", 1500); empregados[0] = empregadoAssalariado; EmpregadoHorista empregadoHorista = new EmpregadoHorista("Maria", "Santos", "4857-3", 0, 40); empregados[1]= empregadoHorista; EmpregadoPorComissao empregadoComissionista = new EmpregadoPorComissao("Joana", "Fernandes", "5773-8", 50, 40); empregados[2] = empregadoComissionista; EmpregadoFixoMaisComissao empregadoComissao = new EmpregadoFixoMaisComissao("Roberto", "Antunes", "4857-3", 50, 40, 300); empregados[3] = empregadoComissao;   Daniel  Arndt  Alves   Polimorfismo   43  
  • 44. Exemplo  de  Polimorfismo   •  Vinculação  Tardia  –  Late  Binding   for(Empregado empregadoAtual:empregados){ // chama a função toString() System.out.println(empregadoAtual); // mostra os ganhos System.out.printf("ganhou $%,.2fnn", empregadoAtual.ganhos()); }   Daniel  Arndt  Alves   Polimorfismo   44  
  • 45. CasHng   •  Cast:  converter  de  um  Hpo  de  dados  para   outro   int i = 20; double x = 2.5; x = (double) i;   Daniel  Arndt  Alves   Polimorfismo   45  
  • 46. Conversão  de  Tipos   Tipo   Tamanho   (bits)   Valores   char   16   'u0000'  a  'uFFFF'   byte   8   -­‐128  a  127   int   32   -­‐2.147.483.648  a  -­‐2.147.483.647   short   16   -­‐32.768  a  +32.767   long   64   -­‐9.223.372.036.854.775.808  a   +9.223.372.036.854.775.807   float   32   -­‐3,40292347E+38  a  +3,40292347E+38   double   64   -­‐1,79769313486231570E+308  a   +1,79769313486231570E+308   boolean   8   true  ou  false   Daniel  Arndt  Alves   Polimorfismo   46  
  • 47. Conversão  de  Tipos   Supondo  a  variável  x   Converter  em   A  variável  y  recebe  o  valor  conver<do   int x = 30   float   float y = (float) x   int x = 30   double   double y = (double) x   float x = 20.5   int   int y = (int) x   String x = "20"   int   int y = Integer.parseInt(x)   String x = "40.84"   float   float y = Float.parseFloat(x)   String x = "40.84"   double   double y = Double.parseDouble(x)   String x = "Java"   Vetor  de  bytes   byte y[] = x.getBytes()   int x = 30   String   String y = String.valueOf(x)   float x = 20.5   String   String y = String.valueOf(x)   double x = 452.43   String   String y = String.valueOf(x)   byte x[]   String   String y = new String(x)   Daniel  Arndt  Alves   Polimorfismo   47  
  • 48. CasHng   •  Upcast:  converter  sem  perda  de  informação   int i = 20; double x = 2.5; x = (double) i;   Daniel  Arndt  Alves   Polimorfismo   48  
  • 49. CasHng   •  Downcast:  converer  com  perda  de  informação   int i = 20; double x = 2.5; i = (int) x;   •  Java  warning:  Possible  loss  of  precision   Daniel  Arndt  Alves   Polimorfismo   49  
  • 50. CasHng   •  Cast:  conversão  dentro  de  uma  hierarquia  de   classes   Daniel  Arndt  Alves   Polimorfismo   50  
  • 51. CasHng   •  Upcast:  subir  na  hierarquia   – EmpregadoPorComissao -> Empregado – EmpregadoFixoMaisComissao -> EmpregadoPorComissao •  Downcast:  descer  na  hierarquia   – EmpregadoPorComissao -> EmpregadoFixoMaisComissao Daniel  Arndt  Alves   Polimorfismo   51  
  • 52. CasHng   •  Superclasse <- Superclasse •  Subclasse <- Subclasse Daniel  Arndt  Alves   Polimorfismo   52  
  • 53. CasHng   •  Superclasse  <-­‐  Subclasse   – Upcast  ocorre  implicitamente   Animal umAnimal = new Animal("Bixo"); Cachorro umCachorro = new Cachorro("Rambo"); umAnimal = umCachorro; umAnimal.rosnar(); – Referenciar  membros  exclusivos  de  subclasses  a   parHr  da  superclasse  gera  um  erro  de  compilação.   Daniel  Arndt  Alves   Polimorfismo   53  
  • 54. CasHng   •  Subclasse  <-­‐  Superclasse   – Erro  de  compilação   umCachorro  =  umAnimal;   – O  downcasHng  explicito  pode  evitar  este  erro   umCachorro  =  (Cachorro)umAnimal;   – Porém,  gera  uma  ClassCastException  (em   tempo  de  execução)   Daniel  Arndt  Alves   Polimorfismo   54  
  • 55. CasHng   •  Antes  de  realizar  esta  coerção,  uHlizar  o   operador  instanceof,  para  assegurar  que   o  objeto  é  de  fato  um  objeto  de  um  Hpo  de   subclasse  apropriado.   if(umAnimal instanceof Cachorro) umCachorro = (Cachorro)umAnimal;   Daniel  Arndt  Alves   Polimorfismo   55  
  • 56. Métodos  final •  Não  podem  ser  sobrescritos  em  uma   subclasse   •  Métodos  private  e  static  são   implicitamente  final •  Métodos  final  são  resolvidos  em  tempo  de   compilação,  isto  é  conhecido  como  vinculação   estáHca.   Daniel  Arndt  Alves   Polimorfismo   56  
  • 57. Classes  final •  Não  podem  ser  estendidas  por  uma  subclasse   •  Todos  os  métodos  em  uma  classe  final  são   implicitamente  final Daniel  Arndt  Alves   Polimorfismo   57  
  • 58. Polimorfismo   58  Daniel  Arndt  Alves  
  • 59. Polimorfismo   59  Daniel  Arndt  Alves  
  • 60. Imagens   •  htp://www.goldb.org/goldblog/cmg_images/ real_programmers_binary.jpg     •  htp://sandersconsulHng.com/Portals/58319/ images/checklist.jpg     Daniel  Arndt  Alves   Polimorfismo   60  
  • 61. Obrigado     Daniel  Arndt  Alves     htp://www.progdan.pro.br/     daniel.alves@mackenzie.br   progdan@progdan.pro.br     Polimorfismo   61  Daniel  Arndt  Alves