You are on page 1of 3

Polimorfismo y Casteo en Java

Ejercicio 1
Se tiene la clase Empleado que tiene como atributos DNI y nombre. No tiene mtodos ms que el
constructor. La clase Docente es subclase de Empleado y cuenta con el mtodo darClases(). En
base a dicho diseo realizar los siguientes ejercicios (si dibujs con cajitas el diseo o lo
implements, quizs te resulte ms fcil entender los ejercicios):
a) Se puede almacenar una instancia de la clase Docente en una variable de tipo Empleado?
Indicar si el siguiente cdigo funciona correctamente, produce error de compilacin o produce
error en tiempo de ejecucin.
Empleado e = new Docente(18999899, "Jose");
b) Se puede almacenar una instancia de la clase Empleado en una variable de tipo Docente?
Indicar si el siguiente cdigo funciona correctamente, produce error de compilacin o produce
error en tiempo de ejecucin.
Docente d = new Empleado(18999899, "Jose");
c) Indicar cul es la salida obtenida al ejecutar el siguiente fragmento de cdigo. Explicar
detalladamente.
Empleado e = new Docente(18999899, "Jose");
System.out.println(e.getClass());
d) Por qu no compila el siguiente fragmento de cdigo? Cul es el error obtenido? Por
qu no se puede enviar el mensaje darClases a la variable e, si sta contiene una instancia de la
clase Docente?
Empleado e = new Docente(18999899, "Jose");
System.out.println(e.darClases());
e) Modificar el cdigo anterior para que compile y funcione correctamente, sin cambiar el
tipo de la variable e en su declaracin.

Ejercicio 2
Se tienen las siguientes clases:
public class ClaseA {
public void metodo(Number n) {
System.out.println("ClaseA: " + n + " " + n.getClass());
}
}
public class ClaseB extends ClaseA {
public void metodo(Integer d) {
System.out.println("ClaseB: " + d + " " + d.getClass());
}
}

Indicar para cada uno de los siguientes fragmentos de cdigo si funcionan correctamente, generan
un error en tiempo de compilacin o generan un error en tiempo de ejecucin. En el caso de que
funcionen, justificar la salida obtenida.
ClaseA a = new ClaseB();
a.metodo(3);
ClaseB b = new ClaseA();
b.metodo(3);
ClaseB b = new ClaseB();
b.metodo(3);
ClaseB b = new ClaseB();
b.metodo((Number)3);
ClaseA a = new ClaseA();
ClaseB b = (ClaseB)a;
b.metodo(3);
ClaseB b = new ClaseB();
ClaseA a = (ClaseA)b;
a.metodo(3);

Ejercicio 3
Dadas las siguientes clases, indicar cul es la salida. Justificar el resultado obtenido para cada una
de las invocaciones al mtodo print.
public class A {
public void print(Object obj) {
System.out.println("Clase A: Imprimiendo Object " + obj
+ " que es de tipo " + obj.getClass());
}
public void print(Number num) {
System.out.println("Clase A: Imprimiendo Number " + num
+ " que es de tipo " + num.getClass());
}
public void print(Integer num) {
System.out.println("Clase A: Imprimiendo Integer " + num
+ " que es de tipo " + num.getClass());
}
}
public class B extends A {
public void print(Number num) {
System.out.println("Clase B: Imprimiendo Number " + num
+ " que es de tipo " + num.getClass());
}
}
public class Prueba {
public static void main(String[] args) {
A a = new A();
a.print(3);
a.print(3.14);
a.print((Number)3);
a.print((Object)3);
A b1 = new B();
b1.print(3.14);
b1.print("Hola");
b1.print((Number)3);
b1.print((Object)3);
B b2 = new B();
b2.print(3.14);
b2.print("Hola");
b2.print((Number)3);
b2.print((Object)3);
}
}

You might also like