Documentos de Académico
Documentos de Profesional
Documentos de Cultura
03-Herencia 3en1 PDF
03-Herencia 3en1 PDF
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 1
3.1. Herencia
3.2. Polimorfismo
3.3. La clase Object
3.4. Clases abstractas
3.5. Bibliografa
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 2
Relacin de herencia:
todos los coches son vehculos Coche
Nomenclatura
clase original superclase padre Vehculo
clase extendida subclase hijo Coche
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 3
Tema 3. Herencia y Polimorfismo
3.1 Herencia
Herencia de operaciones
Al extender una clase
se heredan todas las operaciones del padre
se puede aadir nuevas operaciones
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 4
Lnea Crculo
-puntoInicio -centro
-puntoFin -radio
+dibuja() subclases +dibuja()
+borra() +borra()
+rellena()
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 5
Ejemplo
Clase que representa un vehculo cualquiera
Vehculo
-color: int
-numSerie: int
+color(): int
+numSerie(): int
+pinta(nuevoColor: int)
+cambiaNumSerie(nuevo: int)
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 6
Tema 3. Herencia y Polimorfismo
3.1 Herencia
// atributos
private int color;
private int numSerie;
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 7
/**
* Obtener el numero de serie
*/
public int numSerie()
{
return numSerie;
}
/**
* Obtener el color
*/
public int color()
{
return color;
}
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 8
/**
* Cambiar el numero de serie
*/
public void cambiaNumSerie(int numSerie)
{
this.numSerie=numSerie;
}
/**
* Pintar el vehculo de un color
*/
public void pinta(int nuevoColor)
{
color = nuevoColor;
}
}
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 9
Tema 3. Herencia y Polimorfismo
3.1 Herencia
Vehculo
-color: int
-numSerie: int
+color(): int
+numSerie(): int Coche
+pinta(nuevoColor: int)
+cambiaNumSerie(nuevo: int) -cilindrada: int
+cilindrada(): int
+cambiaCilindrada(nueva: int)
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 10
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 11
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 12
Tema 3. Herencia y Polimorfismo
3.1 Herencia
-color: int
-numSerie: int
+color(): int
+numSerie(): int
+pinta(nuevoColor: int)
+cambiaNumSerie(nuevo: int)
Coche
-cilindrada: int
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 13
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 14
Redefiniendo operaciones
Una subclase puede redefinir (override) una operacin en lugar
de heredarla directamente
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 15
Tema 3. Herencia y Polimorfismo
3.1 Herencia
Herencia y Constructores
Los constructores no se heredan
las subclases deben definir su propio constructor
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 17
Vehculo
-color: int
-numSerie: int
+Vehiculo(color: int,
numSerie: int)
+numSerie(): int
+color(): int
+pinta(nuevoColor: int)
+toString(): String
/**
* Constructor al que le pasamos el color
* y el nmero de serie
*/
public Vehculo(int color, int numSerie) {
this.color = color;
this.numSerie = numSerie;
}
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 19
/**
* Obtener un texto con los datos
* del vehculo
*/
public String toString() {
return "Vehculo -> numSerie= "+
numSerie+", color= "+nombre[color];
}
}
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 20
/**
* Constructor al que le pasamos el color, el
* numero de serie y la cilindrada
*/
public Coche(int color, int numSerie,
int cilindrada) {
super(color, numSerie);
this.cilindrada = cilindrada;
}
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 21
Tema 3. Herencia y Polimorfismo
3.1 Herencia
Ejemplo: Extensin al Coche (cont.)
}
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 22
/**
* Constructor al que le pasamos el color y
* el numero de serie
*/
public Barco(int color, int numSerie) {
super(color, numSerie);
}
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 23
Resumen Herencia
3.2 Polimorfismo
La palabra polimorfismo viene de mltiples formas
Las operaciones polimrficas son aquellas que hacen funciones
similares con objetos diferentes
Ejemplo:
suponer que existe la clase Figura y sus subclases
- Crculo Figura
- Cuadrado
+dibuja()
- Polgono +borra()
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 27
Tema 3. Herencia y Polimorfismo
3.2 Polimorfismo
Polimorfismo (cont.)
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 28
Polimorfismo en Java
El polimorfismo en Java consiste en dos propiedades:
1. Una referencia a una superclase puede apuntar a un objeto de
cualquiera de sus subclases
Vehculo v1=new Coche(Vehiculo.rojo,12345,2000);
Vehculo v2=new Barco(Vehiculo.azul,2345);
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 29
v.cilindrada(); // ERROR!
c.cilindrada(); // correcto
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 32
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 33
Tema 3. Herencia y Polimorfismo
3.2 Polimorfismo
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 34
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 36
Tema 3. Herencia y Polimorfismo
3.2 Polimorfismo
Ejemplo: registro de vehculos (cont.)
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 37
} // clase RegistroDeVehculos
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 38
Resumen
El polimorfismo nos permite abstraer operaciones
podemos invocarlas sin preocuparnos de las diferencias
existentes para objetos diferentes
el sistema elige la operacin apropiada al objeto
El polimorfismo se asocia a las jerarquas de clases:
una superclase y todas las subclases derivadas de ella directa
o indirectamente
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 40
equals
En Java todas las clases descienden toString
de la clase Object ...
...
String Vehculo ... Figura ...
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 41
Mtodo equals
Se encuentra definido en la clase Object como:
public class Object {
...
public boolean equals(Object obj) {
return this == obj;
}
...
}
es decir, compara referencias, no contenidos
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 42
Tema 3. Herencia y Polimorfismo
3.3 La clase Object
Mtodo equals (cont.)
}
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 43
Mtodo toString
Se encuentra definido en la clase Object como:
public class Object {
...
public String toString() {
return ...;
}
...
}
es utilizado por el sistema cuando se concatena un objeto con
un string, por ejemplo:
println("Valor coordenada:" + c);
por defecto retorna un string con el nombre de la clase y la
direccin de memoria que ocupa el objeto
Coordenada@a34f5bd
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 45
Tema 3. Herencia y Polimorfismo
3.3 La clase Object
Mtodo toString (cont.)
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 46
Ejemplos:
nunca crearemos objetos de la clase Figura
- lo haremos de sus subclases Crculo, Cuadrado, ...
nunca crearemos un Vehculo
- crearemos un Coche, un Barco, un Avin, ...
La razn es que no existen figuras o vehculos genricos
ambos conceptos son abstracciones de los objetos reales,
tales como crculos, cuadrados, coches o aviones
a ese tipo de clases las denominaremos clases abstractas
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 47
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 48
Tema 3. Herencia y Polimorfismo
3.4 Clases abstractas
Mtodos abstractos
Una clase abstracta puede tener mtodos abstractos
se trata de mtodos sin cuerpo
que es obligatorio redefinir en las subclases no abstractas
ejemplo de mtodo abstracto
public abstract int mtodoAbstracto(double d);
no tiene cuerpo
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 49
+cambiaColor
+borra
+dibuja
Figura1D Figura2D
-ptoIni -colorRelleno
-ptoFin
+cambiaRelleno
/** Constructor */
public Figura1D(int color){
super(color);
}
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 52
/** Constructor */
public Figura2D(int color, int colorRelleno) {
super(color);
this.colorRelleno=colorRelleno;
}
3.5 Bibliografa
M. Aldea y M. Gonzlez
Prcticas de Programacin 8/03/10 56