martes, 16 de julio de 2013

lunes, 15 de julio de 2013

                                  Polimorfismo

Una misma llamada ejecuta distintas sentencias dependiendo de la clase a la que pertenezca el objeto al que se aplica el método.

•Supongamos que declaramos: Persona p;

•Podría suceder que durante la ejecución del programa, p hace referencia  a un profesor o a un alumno en distintos momentos, y

•Entonces:

 –Si p referencia a un alumno, con p.toString(), se ejecuta el toString de la clase Alumno.

 – Si p referencia a un profesor, con p.toString(), se ejecuta el toString de la clase Profesor.

Enlace dinámico: Se decide en tiempo de ejecución qué método se ejecuta.

----------------------------------------------------------

POLIMORFISMO: CARACTERÍSTICAS

Ø  Moldes de objetos (castings):

Ø  Realizan conversiones de tipo, no modifican al objeto, Solo su tipo.

Ø  Upcasting: Interpretar un objeto de una clase derivada como del mismo tipo que la clase base.


Ø  No hace falta especificarlo

Ø  Downcasting: Interpretar un objeto de una clase base como del mismo tipo que una clase derivada suya.


Ø  Se especifica precediendo al objeto a convertir con el nuevo tipo entre paréntesis. 
   -------------------------------------------------------

Polimorfismo - Objetivos


Ejemplo de Polimorfismo


     Ejemplo de Polimorfismo

public static void main(String[] args) {

Persona v[]=new Persona[10];

 // Se introducen alumnos, profesores y personas en v

for (int i=0 ; i<10; i++)

 /* Se piden datos al usuario de profesor, alumno o persona

*/ switch (tipo) {

case /* profesor */: v[i] = new Profesor (….); break;
case /* alumno */: v[i] = new Alumno(…);break;
case /* persona */: v[i] = new Persona…);break;

default: /* ERROR */ }
}

for (int i=0 ; i<10; i++)

System.out.println(v[i]);// enlace dinámico con toString()

}

Clases y métodos abstractos:

Clases y métodos abstractos:

  •    Clases abstractas: A menudo existen clases que sirven para definir un tipo genérico pero que no tiene sentido instancias (crear objetos de ella).

  •    Métodos abstractos: Un método abstracto significa que tiene que ser sobrescrito. No está implementado.

  •    Una clase con uno o varios métodos abstractos tiene que ser declarada abstracta.


  •   No obstante una clase abstracta no tiene por qué tener métodos abstractos.

MÉTODOS ABSTRACTOS

                                       MÉTODOS ABSTRACTOS

•Tenemos un método f() aplicable a todos los objetos de la clase A.
 – Área de un polígono.
  • La implementación del método es completamente diferente en cada subclase de A.


 – Área de un triángulo.
 – Área de un rectángulo

•Para declarar un método como abstracto, se pone delante la palabra reservada abstract y no define un cuerpo:

abstract tipo nombreMétodo(....);


•Luego en cada subclase se define un método con la misma cabecera y distinto cuerpo.

clases abstractas


            CLASES ABSTRACTAS

•Si una clase contiene al menos un método abstracto,entonces es una clase abstracta.

•Una clase abstracta es una clase de la que no se pueden crear objetos, pero puede ser utilizada como clase padre para otras clases.

Declaración:


abstract class NombreClase {.............. }

------------------------------------------------------




------------------------------------------------------