miércoles, 29 de febrero de 2012

Capítulo 8: Polimorfismo.


  • El polimorfismo incita a la reutilización de código.
  • El polimorfismo permite a una subclase actuar como una superclase o una interfaz que la implemente.
  • A una variable le puedo asignar distintos tipos de objetos en tiempo de ejecución.
  • Una subclase (más específico) “is a” objeto de superclase(más general).
  • El polimorfismo es unidireccional, un objeto más específico puede actuar polimórficamente solo con un objeto más general.
  • Para la implementación en una interfaz, el objeto se declara con la misma funcionalidad definida en la interfaz. Esto permite al objeto actuar polimórficamente como una interfaz.
  • Un objeto puede usarse indistintamente con cualquiera de sus superclases sin necesidad de hacer un cast.
  • Un objeto puede usarse indistintamente con cualquier interfaz que lo implemente sin necesidad de hacer un cast.
  • Cuando un objeto de la subclase es polimórficamente usado como un objeto de la superclase, las funciones más específicas no están disponibles.
  • Ejemplo de polimorfismo:

  • Puesto que Sanar es una interfaz, el método curar lo implementan las clases Medico, Traumatólogo, Neurologo y Oftalmologo (estas 3 últimas porque heredan de Medico)

o   Public void m1(Medico m){
m.curar();                                               
}

o   Public void m1(Medico m){
m.recetar();                               
}


o   Public void m1(Medico m){                      
m.graduar();                                 
}

o   Oftalmologo o=new Oftalmologo();              
m1(o);

o   Curandero c=new Curandero();                  
m1(c);                        

o   Medico m=new Oftalmologo();
Oftalmologo o=(Oftalmologo)m;               
o.graduar();

o   Public void m1(Medico m){
m.curar();
}
Oftalmologo o =new Oftalmologo();            
m1(o);
o   Public void m1(Medico m){
m.graduar();                            
}
Oftalmologo o=new Oftalmologo();
m1(o);

o   Public void m1(Medico m){
((Oftalmologo)m).graduar();             
}
Oftalmologo o =new Oftalmologo();
m1(o);

o   Public void m1(Medico m){
((Oftalmologo)m).graduar();             
}
Medico m =new Medico();                              
m1(m);

o   Medico m=new Oftalmologo();                             
m.graduar();                                 

o   Curandero c=new Medico();                      
c.curar();

  • Si el método curar() fuese abstracto en la clase Medico:

o   Public void m1(Medico m){
m.curar();                              Medico no implementa curar(), pero sí las clases hijas
}

o   Public void m1(Medico m){
m.curar();                                   
}
Medico m=new Medico();                      
m1(m);

o   Public void m2(Sanar s){
s.curar();                                  
}
Curandero c=new Curandero();                 Curandero esta implementado Sanar y esta si contiene curar(), que se implementa en alguna clase hija de Medico.
m2(c);

o   Public void m2(Sanar s){
s.curar();                                  
}
Oftalmologo o=new Oftalmologo();             
m2(o);

o   Public void m3(Sanar s){
 s.curar();                  
Oftalmologo o=(Oftalmologo)s;          
o.graduar();
}




Otro ejemplo de polimorfismo, fíjate en los errores de compilación:
 (gracias Belen, por el ejemplo)

No hay comentarios:

Publicar un comentario