SlideShare ist ein Scribd-Unternehmen logo
1 von 3
Downloaden Sie, um offline zu lesen
1
Tema 7. Polimorfismo en Java.
LPS 2005. 1
Polimorfismo
Tema 7. Polimorfismo en Java.
LPS 2005. 2
Polimorfismo
El polimorfismo es una habilidad de tener varias
formas; por ejemplo, la clase Jefe tiene acceso a
los métodos de la clase Empleado.
Un objeto tiene sólo un forma.
Una variable tiene muchas formas, puede apuntar
a un objeto de diferentes maneras.
En Java hay una clase que es la clase padre de
todas las demás: java.lang.Object.
Un método de esta clase (por ejemplo: toString()
que convierte cualquier elemento de Java a
cadena
de caracteres), puede ser utilizada por todos.
Tema 7. Polimorfismo en Java.
LPS 2005. 3
Polimorfismo
Java permite apuntar a un objeto con una variable
definida como tipo de clase padre.
Empleado e = new Jefe ();
Sólo se puede acceder a las partes del objeto que
pertenecen a la clase Empleado; las partes
específicas de la clase Jefe no se ven. Este efecto
se consigue porque, para el compilador, e es sólo
una variable de tipo Empleado, no Jefe.
e.departamento = "Finanzas";
//Incorrecto
Tema 7. Polimorfismo en Java.
LPS 2005. 4
El operador instanceOf
public class Empleado extends Object
public class Jefe extends Empleado
public class Contractor extends Empleado
public void método (Empleado e){
if (e instanceof Jefe) {
// Obtiene beneficios por su salario
}
else if (e instanceof Contractor) {
//Obtiene tarifa por horas
}
else {
//empleos temporales
}
}
redundante
Tema 7. Polimorfismo en Java.
LPS 2005. 5
Conversión de objetos
Utiliza instanceof para verificar el tipo de objeto.
Restablecer la funcionalidad total de un objeto mediante
una conversión.
Comprobar la conversión apropiada con:
La conversión hacia clases superiores en la jerarquía se
hace implícitamente (con una asignación).
Tema 7. Polimorfismo en Java.
LPS 2005. 6
Conversión de objetos
Conversión hacia abajo, han de ser hacia subclases y el
compilador las comprueba.
El tipo del puntero se comprueba en tiempo de ejecución,
cuando hay errores. Estos errores en tiempo de ejecución
se llaman excepciones.
2
Tema 7. Polimorfismo en Java.
LPS 2005. 7
Conversión de objetos
public void método (Empleado e){
if (e instanceof Jefe) {
Jefe m = (Jefe) e;
System.out.println("Este es el
director de " +
m.departamento);
}
//resto de la función
}
Si no se hace la conversión y se intenta acceder a
e.departamento el compilador no encuentra el miembro
departamento en la clase Empleado.
Tema 7. Polimorfismo en Java.
LPS 2005. 8
Casting
Casting automático
Loro c = new Loro();
Animal a = c;
Se necesita casting explícito
Animal a = new Loro();
Loro c = (Loro) a;
Error de compilación:
Loro c = new Loro();
Gato d = (Gato) c;
Animal
Loro Gato
Tema 7. Polimorfismo en Java.
LPS 2005. 9
Sobreescritura de métodos
Una subclase puede modificar los métodos que ha heredado
del padre.
Una subclase puede crear un método con diferente
funcionalidad al método del padre, pero con el mismo:
•Nombre
•Tipo de retorno
•Lista de argumentos
Recordar que los métodos, con el mismo nombre y lista de
argumentos distinta, dentro de la misma clase, se denomina
sobrecarga. La lista de argumentos es lo que indica al
compilador que se invoca. Tema 7. Polimorfismo en Java.
LPS 2005. 10
Sobreescritura de métodos
public class Empleado {
String nombre;
int salario;
public String getDetails () {
return "Nombre: " + nombre + "n" + "Salario: " +
salario; }
}
public class Jefe extends Empleado{
String departamento;
public String getDetails() {
return "Nombre: " + nombre + "n" + "Departamento: "
+ departamento;
}
}
Tema 7. Polimorfismo en Java.
LPS 2005. 11
Sobreescritura de métodos
Llamada de métodos virtuales.
Empleado e = new Jefe;
e.getDetails ();
Se comprueba el tipo de la referencia estática
(Empleado) en tiempo de compilación y el tipo de la
referencia dinámica (Jefe) en tiempo de ejecución.
¿Cual de los getDetails() se ejecutará, el de la clase
Empleado o el de la clase Jefe?.
Tema 7. Polimorfismo en Java.
LPS 2005. 12
Sobreescritura de métodos
Se obtiene el comportamiento del método asociado a la
clase de la variable y no el comportamiento asociado al
tipo de la variable en el compilador. Por tanto se ejecuta
e.getDetails() ejecutando el del tipo real del objeto, es
decir el método de Jefe.
A este comportamiento se le suele llamar invocación de
métodos virtuales.
Hay una diferencia muy importante entre C++ y Java.
En C++, sólo se modifica el comportamiento
si se define el método como virtual. En los lenguajes
OO puros, esto es normal, pero con ello C++ gana
tiempo en ejecución.
3
Tema 7. Polimorfismo en Java.
LPS 2005. 13
Sobreescritura de métodos
Para poder sobreescribir métodos en las clases
decendientes se debe verificar:
•El tipo de retorno de los dos métodos ha de ser igual.
•El método de la subclase no puede ser menos accesible
que el de la clase padre.
•El método de la subclase no puede provocar más
excepciones que el método del padre.
Tema 7. Polimorfismo en Java.
LPS 2005. 14
Sobreescritura de métodos
public class Padre {
public void método (){ }
}
public class Hijo extends Padre {
public void método (){ }
no puede ser private
}
public class OtraClase{
public void otroMetodo(){
Padre p1 = new Padre();
Padre p2 = new Hijo();
p1.método();
p2.método(); }}
Tema 7. Polimorfismo en Java.
LPS 2005. 15
Sobreescritura de métodos
La inicialización de los objetos es muy estructurada.
Cuando un objeto se inicializa:
•Se reserva memoria y se inicializa con el valor null.
•Se implementan las inicializaciones explícitas, de
cada clase de la jerarquía.
•Se llama a los constructores de cada clase de la
jerarquía.
Las últimas dos etapas se realizan en cada una de las
clases de la jerarquía, empezando por arriba.
Java llama siempre al constructor de la clase padre,
antes de ejecutar el constructor de la clase hija.
Tema 7. Polimorfismo en Java.
LPS 2005. 16
Sobreescritura de métodos
En muchas ocasiones, el constructor por defecto se
utiliza en la clase padre.
Super o this tienen que estar en la primera línea de los
métodos constructores.
public class Empleado {
String nombre;
public Empleado (String n){
nombre = n;}}
public class Jefe extends Empleado {
String departamento;
public Jefe (String s, String d) {
super(s);
departamento = d; }
}

Weitere ähnliche Inhalte

Was ist angesagt?

Metodos Constructor Y Destructor
Metodos Constructor Y DestructorMetodos Constructor Y Destructor
Metodos Constructor Y Destructor
rezzaca
 
OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)
OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)
OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)
Oscar V
 
Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]
Hack '
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVA
innovalabcun
 

Was ist angesagt? (20)

Investigacion sobre carga de metodos
Investigacion sobre carga de metodosInvestigacion sobre carga de metodos
Investigacion sobre carga de metodos
 
Metodos Constructor Y Destructor
Metodos Constructor Y DestructorMetodos Constructor Y Destructor
Metodos Constructor Y Destructor
 
Introduccion al lenguaje java
Introduccion al lenguaje javaIntroduccion al lenguaje java
Introduccion al lenguaje java
 
Java
JavaJava
Java
 
OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)
OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)
OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)
 
Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructores
 
Programación
ProgramaciónProgramación
Programación
 
Programacion orientada a objetos 2
Programacion orientada a objetos 2Programacion orientada a objetos 2
Programacion orientada a objetos 2
 
Palabras reservadas en java y tipos de datos en java
Palabras reservadas en java y tipos de datos en javaPalabras reservadas en java y tipos de datos en java
Palabras reservadas en java y tipos de datos en java
 
cuestionario de Programación
cuestionario de Programación cuestionario de Programación
cuestionario de Programación
 
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
 
Destructores
Destructores Destructores
Destructores
 
Diapositivas de JAVA
Diapositivas de JAVADiapositivas de JAVA
Diapositivas de JAVA
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVA
 
JavaScript para Programadores Java
JavaScript para Programadores JavaJavaScript para Programadores Java
JavaScript para Programadores Java
 
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaTypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
 
Clase viii
Clase viiiClase viii
Clase viii
 
Elementos caracteristicos de la poo
Elementos caracteristicos de la pooElementos caracteristicos de la poo
Elementos caracteristicos de la poo
 
Serialización de objetos en java
Serialización de objetos en javaSerialización de objetos en java
Serialización de objetos en java
 

Andere mochten auch

Preguntas de investigacion prof
Preguntas de investigacion              profPreguntas de investigacion              prof
Preguntas de investigacion prof
jpvg
 
Taller (18 videos)
Taller (18  videos)Taller (18  videos)
Taller (18 videos)
francy
 
APB ¡¡ Me va a cambiar!!!
APB ¡¡ Me va a cambiar!!!APB ¡¡ Me va a cambiar!!!
APB ¡¡ Me va a cambiar!!!
marisoleconomia
 
Interrupcion Yconflictodel Hardware
Interrupcion Yconflictodel HardwareInterrupcion Yconflictodel Hardware
Interrupcion Yconflictodel Hardware
kjrojas
 

Andere mochten auch (20)

El portafolio
El portafolioEl portafolio
El portafolio
 
Projet Jean-Jacques Giannesini Paris2014
Projet Jean-Jacques Giannesini Paris2014Projet Jean-Jacques Giannesini Paris2014
Projet Jean-Jacques Giannesini Paris2014
 
La amistad trabajo
La amistad trabajoLa amistad trabajo
La amistad trabajo
 
Carriere
CarriereCarriere
Carriere
 
Proyecto TIC
Proyecto TICProyecto TIC
Proyecto TIC
 
00 comenzando su negocio syn
00 comenzando su negocio syn00 comenzando su negocio syn
00 comenzando su negocio syn
 
Présentation du Progiciel ProPlus.Net:La solution de suivi de production à co...
Présentation du Progiciel ProPlus.Net:La solution de suivi de production à co...Présentation du Progiciel ProPlus.Net:La solution de suivi de production à co...
Présentation du Progiciel ProPlus.Net:La solution de suivi de production à co...
 
Fabianra
FabianraFabianra
Fabianra
 
Apprendre un nouveau langage, le cas ruby
Apprendre un nouveau langage, le cas rubyApprendre un nouveau langage, le cas ruby
Apprendre un nouveau langage, le cas ruby
 
Tutorial google-maps
Tutorial google-mapsTutorial google-maps
Tutorial google-maps
 
Preguntas de investigacion prof
Preguntas de investigacion              profPreguntas de investigacion              prof
Preguntas de investigacion prof
 
Les meetups dédiés à R dans le monde
Les meetups dédiés à R dans le mondeLes meetups dédiés à R dans le monde
Les meetups dédiés à R dans le monde
 
Resumen cumbre 1
Resumen cumbre 1Resumen cumbre 1
Resumen cumbre 1
 
Taller (18 videos)
Taller (18  videos)Taller (18  videos)
Taller (18 videos)
 
APB ¡¡ Me va a cambiar!!!
APB ¡¡ Me va a cambiar!!!APB ¡¡ Me va a cambiar!!!
APB ¡¡ Me va a cambiar!!!
 
40 propositions pour simplifier la vie des francais
40 propositions pour simplifier la vie des francais40 propositions pour simplifier la vie des francais
40 propositions pour simplifier la vie des francais
 
Questionnaire answers SoulMate
Questionnaire answers SoulMateQuestionnaire answers SoulMate
Questionnaire answers SoulMate
 
Interrupcion Yconflictodel Hardware
Interrupcion Yconflictodel HardwareInterrupcion Yconflictodel Hardware
Interrupcion Yconflictodel Hardware
 
Turismo y Gastronomía: Buscando posicionamiento en internet. Andoni Munduate ...
Turismo y Gastronomía: Buscando posicionamiento en internet. Andoni Munduate ...Turismo y Gastronomía: Buscando posicionamiento en internet. Andoni Munduate ...
Turismo y Gastronomía: Buscando posicionamiento en internet. Andoni Munduate ...
 
Hansel et gretel
Hansel et gretelHansel et gretel
Hansel et gretel
 

Ähnlich wie Tema 7 polimorfismo en java

Todo lo que un desarrollador no puede desconocer de javascript tutorial j q...
Todo lo que un desarrollador no puede desconocer de javascript   tutorial j q...Todo lo que un desarrollador no puede desconocer de javascript   tutorial j q...
Todo lo que un desarrollador no puede desconocer de javascript tutorial j q...
Marcelino Ortiz
 
Guia de estudio OCP Java SE 7 Programmer
Guia de estudio OCP Java SE 7 ProgrammerGuia de estudio OCP Java SE 7 Programmer
Guia de estudio OCP Java SE 7 Programmer
Oscar V
 
Clases abstractas java metodos abstract class api ejemplo ejercicio
Clases abstractas java metodos abstract class api ejemplo ejercicioClases abstractas java metodos abstract class api ejemplo ejercicio
Clases abstractas java metodos abstract class api ejemplo ejercicio
Jose Luis Moreno Arcos
 
Sesion2 Php Oo Y Mysql
Sesion2 Php Oo Y MysqlSesion2 Php Oo Y Mysql
Sesion2 Php Oo Y Mysql
Hugo Flores
 
Revista java world cap 8,9,10
Revista java world cap 8,9,10Revista java world cap 8,9,10
Revista java world cap 8,9,10
Hack '
 

Ähnlich wie Tema 7 polimorfismo en java (20)

03 java poo_parte_2
03 java poo_parte_203 java poo_parte_2
03 java poo_parte_2
 
08 Herencia
08   Herencia08   Herencia
08 Herencia
 
Fundamentos POO en JS. Mixins y Traits.
Fundamentos POO en JS. Mixins y Traits.Fundamentos POO en JS. Mixins y Traits.
Fundamentos POO en JS. Mixins y Traits.
 
Tema 8 polimorfismo
Tema 8 polimorfismoTema 8 polimorfismo
Tema 8 polimorfismo
 
Presentacion Java
Presentacion JavaPresentacion Java
Presentacion Java
 
Todo lo que un desarrollador no puede desconocer de javascript tutorial j q...
Todo lo que un desarrollador no puede desconocer de javascript   tutorial j q...Todo lo que un desarrollador no puede desconocer de javascript   tutorial j q...
Todo lo que un desarrollador no puede desconocer de javascript tutorial j q...
 
JAVA ORIENTADO A OBJETOS - INTERFACES
JAVA ORIENTADO A OBJETOS - INTERFACESJAVA ORIENTADO A OBJETOS - INTERFACES
JAVA ORIENTADO A OBJETOS - INTERFACES
 
zines.esp.v12.pdf
zines.esp.v12.pdfzines.esp.v12.pdf
zines.esp.v12.pdf
 
Functional SE.pdf
Functional SE.pdfFunctional SE.pdf
Functional SE.pdf
 
modularidad de programación 2da parte (3) (1).pptx
modularidad de programación 2da parte (3) (1).pptxmodularidad de programación 2da parte (3) (1).pptx
modularidad de programación 2da parte (3) (1).pptx
 
JAVA ORIENTADO A OBJETOS - HERENCIA
JAVA ORIENTADO A OBJETOS - HERENCIAJAVA ORIENTADO A OBJETOS - HERENCIA
JAVA ORIENTADO A OBJETOS - HERENCIA
 
Guia de estudio OCP Java SE 7 Programmer
Guia de estudio OCP Java SE 7 ProgrammerGuia de estudio OCP Java SE 7 Programmer
Guia de estudio OCP Java SE 7 Programmer
 
Clases abstractas java metodos abstract class api ejemplo ejercicio
Clases abstractas java metodos abstract class api ejemplo ejercicioClases abstractas java metodos abstract class api ejemplo ejercicio
Clases abstractas java metodos abstract class api ejemplo ejercicio
 
JAVA 00 - TEMA 05 - HERENCIA
JAVA 00 - TEMA 05 - HERENCIAJAVA 00 - TEMA 05 - HERENCIA
JAVA 00 - TEMA 05 - HERENCIA
 
Intro
IntroIntro
Intro
 
10 - Slides-Java sesion.pptx
10 - Slides-Java sesion.pptx10 - Slides-Java sesion.pptx
10 - Slides-Java sesion.pptx
 
Sesion2 Php Oo Y Mysql
Sesion2 Php Oo Y MysqlSesion2 Php Oo Y Mysql
Sesion2 Php Oo Y Mysql
 
Polimorfism oo
Polimorfism ooPolimorfism oo
Polimorfism oo
 
Java OO - Tema 06 - Interfaces
Java OO - Tema 06 -  InterfacesJava OO - Tema 06 -  Interfaces
Java OO - Tema 06 - Interfaces
 
Revista java world cap 8,9,10
Revista java world cap 8,9,10Revista java world cap 8,9,10
Revista java world cap 8,9,10
 

Kürzlich hochgeladen

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Kürzlich hochgeladen (11)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 

Tema 7 polimorfismo en java

  • 1. 1 Tema 7. Polimorfismo en Java. LPS 2005. 1 Polimorfismo Tema 7. Polimorfismo en Java. LPS 2005. 2 Polimorfismo El polimorfismo es una habilidad de tener varias formas; por ejemplo, la clase Jefe tiene acceso a los métodos de la clase Empleado. Un objeto tiene sólo un forma. Una variable tiene muchas formas, puede apuntar a un objeto de diferentes maneras. En Java hay una clase que es la clase padre de todas las demás: java.lang.Object. Un método de esta clase (por ejemplo: toString() que convierte cualquier elemento de Java a cadena de caracteres), puede ser utilizada por todos. Tema 7. Polimorfismo en Java. LPS 2005. 3 Polimorfismo Java permite apuntar a un objeto con una variable definida como tipo de clase padre. Empleado e = new Jefe (); Sólo se puede acceder a las partes del objeto que pertenecen a la clase Empleado; las partes específicas de la clase Jefe no se ven. Este efecto se consigue porque, para el compilador, e es sólo una variable de tipo Empleado, no Jefe. e.departamento = "Finanzas"; //Incorrecto Tema 7. Polimorfismo en Java. LPS 2005. 4 El operador instanceOf public class Empleado extends Object public class Jefe extends Empleado public class Contractor extends Empleado public void método (Empleado e){ if (e instanceof Jefe) { // Obtiene beneficios por su salario } else if (e instanceof Contractor) { //Obtiene tarifa por horas } else { //empleos temporales } } redundante Tema 7. Polimorfismo en Java. LPS 2005. 5 Conversión de objetos Utiliza instanceof para verificar el tipo de objeto. Restablecer la funcionalidad total de un objeto mediante una conversión. Comprobar la conversión apropiada con: La conversión hacia clases superiores en la jerarquía se hace implícitamente (con una asignación). Tema 7. Polimorfismo en Java. LPS 2005. 6 Conversión de objetos Conversión hacia abajo, han de ser hacia subclases y el compilador las comprueba. El tipo del puntero se comprueba en tiempo de ejecución, cuando hay errores. Estos errores en tiempo de ejecución se llaman excepciones.
  • 2. 2 Tema 7. Polimorfismo en Java. LPS 2005. 7 Conversión de objetos public void método (Empleado e){ if (e instanceof Jefe) { Jefe m = (Jefe) e; System.out.println("Este es el director de " + m.departamento); } //resto de la función } Si no se hace la conversión y se intenta acceder a e.departamento el compilador no encuentra el miembro departamento en la clase Empleado. Tema 7. Polimorfismo en Java. LPS 2005. 8 Casting Casting automático Loro c = new Loro(); Animal a = c; Se necesita casting explícito Animal a = new Loro(); Loro c = (Loro) a; Error de compilación: Loro c = new Loro(); Gato d = (Gato) c; Animal Loro Gato Tema 7. Polimorfismo en Java. LPS 2005. 9 Sobreescritura de métodos Una subclase puede modificar los métodos que ha heredado del padre. Una subclase puede crear un método con diferente funcionalidad al método del padre, pero con el mismo: •Nombre •Tipo de retorno •Lista de argumentos Recordar que los métodos, con el mismo nombre y lista de argumentos distinta, dentro de la misma clase, se denomina sobrecarga. La lista de argumentos es lo que indica al compilador que se invoca. Tema 7. Polimorfismo en Java. LPS 2005. 10 Sobreescritura de métodos public class Empleado { String nombre; int salario; public String getDetails () { return "Nombre: " + nombre + "n" + "Salario: " + salario; } } public class Jefe extends Empleado{ String departamento; public String getDetails() { return "Nombre: " + nombre + "n" + "Departamento: " + departamento; } } Tema 7. Polimorfismo en Java. LPS 2005. 11 Sobreescritura de métodos Llamada de métodos virtuales. Empleado e = new Jefe; e.getDetails (); Se comprueba el tipo de la referencia estática (Empleado) en tiempo de compilación y el tipo de la referencia dinámica (Jefe) en tiempo de ejecución. ¿Cual de los getDetails() se ejecutará, el de la clase Empleado o el de la clase Jefe?. Tema 7. Polimorfismo en Java. LPS 2005. 12 Sobreescritura de métodos Se obtiene el comportamiento del método asociado a la clase de la variable y no el comportamiento asociado al tipo de la variable en el compilador. Por tanto se ejecuta e.getDetails() ejecutando el del tipo real del objeto, es decir el método de Jefe. A este comportamiento se le suele llamar invocación de métodos virtuales. Hay una diferencia muy importante entre C++ y Java. En C++, sólo se modifica el comportamiento si se define el método como virtual. En los lenguajes OO puros, esto es normal, pero con ello C++ gana tiempo en ejecución.
  • 3. 3 Tema 7. Polimorfismo en Java. LPS 2005. 13 Sobreescritura de métodos Para poder sobreescribir métodos en las clases decendientes se debe verificar: •El tipo de retorno de los dos métodos ha de ser igual. •El método de la subclase no puede ser menos accesible que el de la clase padre. •El método de la subclase no puede provocar más excepciones que el método del padre. Tema 7. Polimorfismo en Java. LPS 2005. 14 Sobreescritura de métodos public class Padre { public void método (){ } } public class Hijo extends Padre { public void método (){ } no puede ser private } public class OtraClase{ public void otroMetodo(){ Padre p1 = new Padre(); Padre p2 = new Hijo(); p1.método(); p2.método(); }} Tema 7. Polimorfismo en Java. LPS 2005. 15 Sobreescritura de métodos La inicialización de los objetos es muy estructurada. Cuando un objeto se inicializa: •Se reserva memoria y se inicializa con el valor null. •Se implementan las inicializaciones explícitas, de cada clase de la jerarquía. •Se llama a los constructores de cada clase de la jerarquía. Las últimas dos etapas se realizan en cada una de las clases de la jerarquía, empezando por arriba. Java llama siempre al constructor de la clase padre, antes de ejecutar el constructor de la clase hija. Tema 7. Polimorfismo en Java. LPS 2005. 16 Sobreescritura de métodos En muchas ocasiones, el constructor por defecto se utiliza en la clase padre. Super o this tienen que estar en la primera línea de los métodos constructores. public class Empleado { String nombre; public Empleado (String n){ nombre = n;}} public class Jefe extends Empleado { String departamento; public Jefe (String s, String d) { super(s); departamento = d; } }