Herencia Y Polimorfismo
• Capítulo 4 del libro “Mark Allen Weiss. Estructuras de
Herencia, polimorfismo y
genericidad
Datos en Java. Pearson Educación, 2000”
• Capítulos 8 a 10 del libro “P.J. Deitel, H.M. Deitel: Java.
Cómo programar (7ª edición), Prentice Hall, 2008”
Lección 4
• Y otros....
1
2
Prólogo
Esquema
• Recordar…
1.
2.
3.
4.
Programación Orientada a Objetos=
– Soporte sintáctico explícito para abstracción de
datos (TADs) +
– Cambio de perspectiva (los programas son
apéndices de los datos) +
– Prestaciones asociadas a la jerarquía de clases
(herencia, polimorfismo, etc.)
3
Herencia
Polimorfismo
Herencia múltiple
Genericidad
4
Herencia
Herencia
Persona
• Relación de herencia (“es un”, “es una”):
– todos los alumnos sonpersonas
es una
es una
– todos los profesores son personas
Alumno
Profesor
• La herencia es un mecanismo por el que se
pueden crear nuevas clases a partir de
otras existentes
– heredando y posiblemente añadiendo atributos
– heredando, y posiblemente modificando, y/o añadiendo métodos
• Un método o atributo no puede ser suprimido en el mecanismo de
herencia
• Terminología
Personaclase original
clase base
superclase
padre
Alumno
clase extendida
clase derivada
subclase
hijo
• El valor de la herencia radica en:
– La posibilidad de definir en la subclase adiciones
o sustituciones a las características de la
superclase (Especialización).
– La posibilidad de factorizar las propiedades
comunes a muchos objetos y definirlas en una
clase base comúna ellos (Generalización).
Es un mecanismo que permite la reutilización de
código
5
Herencia de atributos
Al extender una clase se heredan todos los
atributos del padre.
Se pueden añadir nuevos atributos.
public class Alumno extends Persona {
private Asignatura[] matricula;
public Alumno(String n, int e,
String d, Asignatura [] matrícula)
{
6
Herencia de métodos
publicclass Persona {
private String nombre;
private int edad;
private String dni;
public Persona(String n, int e,
String d) {
...
}
Persona
...
-nombre: String
}
-edad: int
-dni: String
• Al extender una clase
– se heredan todos los métodos del padre
– se puede añadir nuevos métodos
• La nueva clase puede elegir para los métodos heredados:
– redefinir el método: se vuelve a escribir suimplementación
(conservando su cabecera)
• el nuevo método puede usar el del padre y hacer más cosas:
...
}
programación incremental
...
}
public class Profesor extends Persona {
private double sueldo;
private int antigüedad;
Alumno
Profesor
-Asignatura[]:
-sueldo: double
-antigüedad: int
matrícula
public Profesor(String n, int e,
String d, double s, int a){
• o puede ser totalmente diferente
– dejarlo como está: no cambiar nada
(no aparecerá explícitamente en la clase derivada)
• La herencia se puede aplicar múltiples veces
– da lugar a una jerarquía de clases
...
}
...
}
7
8
Herencia de métodos
Objetos y herencia
Persona per = new Persona(. . .);
(.
Alumno alu = new Alumno
. .); per
• Los métodos de lasuperclase no se repiten en las subclases
Profesor pro = new Profesor
salvo que se hayan redefinido
• Se puede hacer herencia sin
añadir métodos ni atributos
Bedel bed = new Bedel
Persona
-nombre: String
-edad: int
-dni: String
Bedel
heredados
añadidos
getNombre(): String
getEdad(): int
getDni(): String
Alumno
Profesor
-sueldo: double
-antigüedad: int
pro:Alumno
nombre: String
edad: int
dni: String
Asignatura[]: matrícula
getNombre(): String
getEdad(): int
getDni(): String
hallarCursoMasBajo
Matriculado(): int
alu
+hallarCurso
MasBajoMatri
culado: int
. .);
getNombre(): String
getEdad(): int
getDni(): String
:Bedel
nombre: String
edad: int
dni: String
-Asignatura[]:
matrícula
:Persona
nombre: String
edad:...
Regístrate para leer el documento completo.