Documentos de Académico
Documentos de Profesional
Documentos de Cultura
- Herencia y polimorfismo
1. Herencia
2. Polimorfismo
3. Interfaces
1. Herencia
1.1. Introduccin
1.2. Los constructores en la herencia
1.3. Modificadores de acceso
1.4. La clase Object
1.5 Herencia vs. composicin
1.1.- Introduccin
La herencia permite definir clases (subclases) a partir de otra clase
ms genrica (superclase).
La subclase rene todas la propiedades de la superclase, adems
de las suyas propias.
La herencia potencia la reutilizacin de cdigo, genera cdigo
ms fiable y robusto y reduce el coste de mantenimiento.
Persona
Persona
nombre
apellidos
dni
mostrarNombre
mostrarDNI
Estudiante
Estudiante
numExpediente
mostrarNumExp
class Persona(){
String nombre, apellidos, dni;
void mostrarNombre(){
System.out.println(Nombre: + apellidos + , + nombre);
}
void mostrarDNI() {
System.out.println(DNI: + dni);
}
}
class Estudiante extends Persona {
String numExpediente;
void mostrarNumExp(){
System.out.println(Nm. Exp. + numExpediente);
}
}
class Ejemplo {
public static void main(String args[]) {
Estudiante e = new Estudiante();
e.nombre = Ana;
e.apellidos = Garca;
e.dni = 1234567;
e.numExpediente = 10001;
e.mostrarNombre();
e.mostrarNumExp();
}
}
1.1.- Introduccin
En Java no se permite la herencia mltiple.
A
C
Error
C
Correcto
class Esfera(){
double radio;
Esfera() {} // Este constructor existe sin necesidad de escribirlo
}
Esfera e = new Esfera();
Correcto
class Esfera(){
double radio;
Esfera(double r) {
radio = r;
}
}
Esfera e1 = new Esfera();
Esfera e2 = new Esfera(10);
Correcto / Incorrecto?
Correcto / Incorrecto?
Correcto / Incorrecto?
Correcto / Incorrecto?
11
Solucin a
Solucin b (preferible)
12
... }
A {
A {
... }
B
C
D
E
E
ob1
ob2
ob3
ob4
ob5
=
=
=
=
=
new
new
new
new
new
B();
C(1);
D(1);
E(1);
E();
A {
super(x); }
D {
... }
Sin
modificador
(friendly)
protected
public
Misma clase
Si
Si
Si
Si
No
Si
Si
Si
Subclase de
diferente paquete
No
No
Si
Si
No subclase de
diferente paquete
No
No
No
Si
14
15
class Punto {
int x, y;
. . .
}
class Figura extends Punto{
. . .
class A extends B {
class A {
B b;
2. Polimorfismo
2.1. Introduccin
2.2. Sobreescritura de mtodos
2.3. La conversin hacia arriba
2.4. Enlace dinmico y polimorfismo
2.5. Clases abstractas
2.6. La conversin hacia abajo
2.7. Sobreescribir mtodos de Object
17
2.1- Introduccin
19
// disparar de Nave
// disparar de NaveConEscudo
}
}
20
21
22
Se denomina:
Tipo esttico: el tipo con el que se declara la referencia.
Tipo dinmico: el tipo del objeto instanciado.
En la sentencia: A ref = new B();
Tipo esttico de ref: A
Tipo dinmico de ref: B
23
Planeta
Esfera e;
e = new Planeta(); // Conversin hacia arriba
obj1
B A
obj2
B A
m1()
m1()
m2()
m2()
obj1.m1() OK
obj1.m2() OK
obj2.m1() OK
obj2.m2() ERROR
obj3
A
m1()
ERROR
25
. . . }
m1
. . . }
. . . }
// Enlace dinmico
}
}
28
Requerimientos:
El objeto que le pasemos como parmetro al mtodo
seleccionDirecta debe ser un subtipo (subclase) de Conjunto.
La clase Conjunto debe contener los mtodos getNumElementos,
menor e intercambiar.
El objeto que pasemos como parmetro puede tener sobreescritos los 30
mtodos de la clase Conjunto.
Lo ideal sera:
1. Incluir el mtodo area pero no implementarlo (sin
cdigo)
2. Obligar a las subclases directas que lo
implementen
33
35
36
// Error
O simplemente:
((Circulo)f).setRadio(5);
37
38
3. Interfaces
3.1. Introduccin
3.2. Declaracin e implementacin de interfaces
3.3. Polimorfismo mediante interfaces
3.4. Definicin de constantes
3.5. Herencia entre interfaces
42
3.1- Introduccin
En Java no existe la herencia mltiple.
Las interfaces ofrecen algunas de las ventajas de la
herencia mltiple sin ninguno de sus inconvenientes.
Una interfaz guarda muchas similitudes con una clase
abstracta con todos sus mtodos abstractos y atributos
constantes y estticos (final static).
A
B
No genera conflictos si todos los
mtodos de A y B son abstractos.
C
43
Ejemplo:
interface Coleccion {
void aadirElemento( Object o );
int getNumElementos();
void mostrar();
}
44
45
I1
I2
F
46
47
49