Está en la página 1de 8

Programación Orientada a Objetos

POLIMORFISMO
¿QUÉ ES?

• Es la capacidad que tiene una referencia para tomar valores diferentes que
pertenecen a una misma clase padre
Empleado e = new Gerente(); // valido
Utilizando la variable e tal cual, puede acceder únicamente a las partes del objeto
que son componentes de empleado; las partes especificas de Gerente están ocultas.
Esto es porque, por lo que respecta al compilador e, es un Empleado, no un Gerente.
Por lo tanto, no se permite lo siguiente.

//Intento no permitido de asignar un atributo de Gerente e.departamento = “ventas”;


// la variable se declara como un tipo de Empleado
//a pesar de que el objeto Gerente tiene ese atributo
LLAMADA A MÉTODOS VIRTUALES

• Se obtiene el comportamiento asociado al objeto al que hace referencia


la variable durante el tiempo de ejecución.

Empleado e = new Gerente();


e.getDetails();
COLECCIONES HETEROGÉNEAS

• En el lenguaje java incluye una clase object que permite crear colecciones
de todos los tipos de elementos porque todas las clases amplían la clase
object. Estas colecciones denominan heterogenias.

Empleado [] persona = new Empleado[1024];


Personal [0] = new Gerente();
Personal [1] = new Empleado();
Personal [2] = new Ingeniero();
ARGUMENTOS POLIMÓRFICOS

• Es posible escribir métodos que acepten un objeto genérico (en este caso,
la clase Empleado) y funcionen adecuadamente con los objetos de
cualquier subclase de dicho objeto. Si se utilizan las características
polimórficas, es posible hacerlo como sigue:
Public class calcularImpuestos {
public tipodeImpuestos hallartipoImpuesto(Empleadoe ){
// hacer los cálculos y devolver el tipo de Impuesto para e
}
}
OPERADOR INSTANCEOF

• Daado que es posible pasar objetos de un lugar a otro utilizando referencias


a sus superclases, a veces conviene saber de que objetos reales se dispone,
este es el propósito del operador instancerf. Supongamos que la jerarquía
de clases se amplia de la forma siguiente.

Public class Empleado extends Objet


Public class Gerente extends Empleado
Public class Ingeniero extends Empleado
CONVERSIÓN DE OBJETOS
Si no realiza la conversión, el intento de ejecutar e.getDepartamento () fracasará porque el
compilador no puede localizar ningún método llamado getDepartamento en la clase Empleado.
Si no realiza la comprobación con instanceof, corre el riesgo de que falle la conversión. En general,
cualquier intento de convertir una referencia a un objeto se somete a diferentes comprobaciones:
• Las conversiones en dirección ascendente dentro de la jerarquía de clases siempre están
permitidas y, de hecho, no precisan el operador de conversión. Se pueden hacer mediante una
simple asignación.
• En el caso de las conversiones en dirección descendente, el compilador debe poder considerar
que la conversión es, al menos, posible. Por ejemplo, no se permitirá ningún intento de convertir
una referencia a Gerente en una referencia a Ingeniero, porque el Ingeniero no es un Gerente. La
clase de destino de la conversión tiene que ser una subclase del tipo de referencia actual.
• Si el compilador permite la conversión, el tipo de objeto se comprueba durante el tiempo de
ejecución. Por ejemplo, si se omite la comprobación instanceof en el código y el objeto que se va
a convertir en realidad no es del tipo en el que se va a convertir, se producirá un error de tiempo
de ejecución (excepción) Las excepciones son una forma de error de tiempo de ejecución que se
tratan más adelante en el módulo.
BIBLIOGRAFIA
• Sun Microsystems. (2008). Lenguaje de programación Java. Sun
Microsystems, Inc.

• Programación ATS. (2017). 77. Programación en Java || POO ||


Polimorfismo en POO [vídeo]. YouTube.
https://www.youtube.com/watch?v=RXcUTWczbag&t=311s

También podría gustarte