Herencia
Java y Servicios Web I
Master en Ingeniería Matemática
Manuel Montenegro
Dpto. Sistemas Informáticos y Computación
Desp. 467 (Mat)
[email protected]
Contenidos
● Extensión mediante herencia.
● Reescritura de métodos.
● Modificador de acceso protected.
● Jerarquía de clases.
● La clase Object.
14/Mayo/2012
4. Herencia
2
Herencia
● Mecanismo de la programación orientada a
objetos diseñado para la reutilización y la
extensibilidad.
● Permite añadir funcionalidad a una clase ya
existente.
Superclase
Subclase
14/Mayo/2012
4. Herencia
3
Persona
String nombre;
Fecha fechaNacimiento;
int dni;
<<constructor>>
String getNombre()
Fecha getFechaNacimiento()
int getDni()
void imprimirDatos()
Ejemplo: Persona
public class Persona {
private String nombre;
private Fecha fechaNacimiento;
private int dni;
public Persona(String nombre,
Fecha fechaNacimiento, int dni) {
this.nombre = nombre;
this.fechaNacimiento = fechaNacimiento;
this.dni = dni;
}
public void imprimirDatos() {
System.out.print("DNI: ");
System.out.println(dni);
System.out.println("NOMBRE: " + nombre);
System.out.print("FECHA DE NACIMIENTO: ");
fechaNacimiento.imprimir();
System.out.println();
}
}
14/Mayo/2012
4. Herencia
4
Ejemplo: Persona
Persona
String nombre;
Fecha fechaNacimiento;
int dni;
<<constructor>>
String getNombre()
Fecha getFechaNacimiento()
int getDni()
void imprimirDatos()
Empleado
int sueldoBase;
int getSueldo()
14/Mayo/2012
4. Herencia
5
Ejemplo: Persona
public class Empleado extends Persona {
private int sueldoBase;
…
public int getSueldo() {
return sueldoBase;
}
}
Persona
String nombre;
Fecha fechaNacimiento;
int dni;
<<constructor>>
String getNombre()
Fecha getFechaNacimiento()
int getDni()
void imprimirDatos()
Empleado
int sueldoBase;
int getSueldo()
14/Mayo/2012
4. Herencia
6
Contenidos
● Extensión mediante herencia.
● Reescritura de métodos.
● Modificador de acceso protected.
● Jerarquía de clases.
● La clase Object.
14/Mayo/2012
4. Herencia
7
Reescritura de métodos
Persona
String nombre;
Fecha fechaNacimiento;
int dni;
<<constructor>>
String getNombre()
Fecha getFechaNacimiento()
int getDni()
void imprimirDatos()
public class Empleado extends Persona {
…
public void imprimirDatos() {
System.out.print("DNI: ");
System.out.println(dni);
System.out.println("NOMBRE: " + nombre);
System.out.print("FECHA DE NACIMIENTO: ");
fechaNacimiento.imprimir();
System.out.println();
System.out.print(“SUELDO: “);
System.out.println(sueldoBase);
}
}
Empleado
int sueldoBase;
int getSueldo()
void imprimirDatos()
14/Mayo/2012
4. Herencia
8
Reescritura de métodos
Persona
String nombre;
Fecha fechaNacimiento;
int dni;
<<constructor>>
String getNombre()
Fecha getFechaNacimiento()
int getDni()
void imprimirDatos()
public class Empleado extends Persona {
…
public void imprimirDatos() {
super.imprimirDatos();
System.out.print(“SUELDO: “);
System.out.println(sueldoBase);
}
}
Empleado
int sueldoBase;
int getSueldo()
void imprimirDatos()
14/Mayo/2012
4. Herencia
9
Reescritura de métodos
Persona
String nombre;
Fecha fechaNacimiento;
int dni;
<<constructor>>
String getNombre()
Fecha getFechaNacimiento()
int getDni()
void imprimirDatos()
public class Empleado extends Persona {
public Empleado(String nombre, Fecha fechaNacimiento,
int dni, int sueldoBase) {
this.nombre = nombre;
this.fechaNacimiento = fechaNacimiento;
this.dni = dni;
this.sueldoBase = sueldoBase;
}
}
Empleado
int sueldoBase;
<<constructor>>
int getSueldo()
void imprimirDatos()
14/Mayo/2012
4. Herencia
10
Reescritura de métodos
Persona
String nombre;
Fecha fechaNacimiento;
int dni;
<<constructor>>
String getNombre()
Fecha getFechaNacimiento()
int getDni()
void imprimirDatos()
Empleado
int sueldoBase;
<<constructor>>
int getSueldo()
void imprimirDatos()
public class Empleado extends Persona {
public Empleado(String nombre, Fecha fechaNacimiento,
int dni, int sueldoBase) {
super(nombre, fechaNacimiento, dni);
this.sueldoBase = sueldoBase;
}
…
}
● La primera línea del constructor de la
subclase ha de llamar al constructor
de la superclase.
● Si no lo hace, se intentará llamar
automáticamente al constructor por
defecto.
14/Mayo/2012
4. Herencia
11
Contenidos
● Extensión mediante herencia.
● Reescritura de métodos.
● Modificador de acceso protected.
● Jerarquía de clases.
● La clase Object.
14/Mayo/2012
4. Herencia
12
Modificadores de acceso
● ¿Qué elementos de la superclase son accesibles
desde la subclase?
● Los métodos y atributos public son accesibles.
● Los métodos y atributos private no son accesibles,
aunque sí se heredan.
● Si queremos que un atributo o método privado
sea accesible desde las subclases, tendremos
que definirlo en la superclase con el
modificador protected.
public class Empleado extends Persona {
protected int sueldoBase;
}
14/Mayo/2012
4. Herencia
13
Modificadores de acceso
public
protected private
Dentro de la
clase
Subclases
Otro sitio
14/Mayo/2012
4. Herencia
14
Ejemplo: Estudiante
public class Estudiante extends Persona {
private int puntuacionTotal;
private int numeroCalificaciones;
public Empleado(String nombre, Fecha fechaNacimiento,
int dni) {
super(nombre, fechaNacimiento, dni);
this.sueldoBase = sueldoBase;
this.puntos = 0;
this.numeroCalificaciones = 0;
}
public void nuevaCalificacion(int puntos) {
puntuacionTotal += puntos;
numeroCalificaciones++;
}
public double getNotaMedia() {
return ((double) puntos)/numeroCalificaciones;
}
public void imprimirDatos() {
super.imprimirDatos();
System.out.println(“NOTA MEDIA: “);
System.out.println(getNotaMedia());
}
}
Persona
String nombre;
Fecha fechaNacimiento;
int dni;
<<constructor>>
String getNombre()
Fecha getFechaNacimiento()
int getDni()
void imprimirDatos()
Estudiante
int puntuacionTotal;
int numeroCalificaciones
<<constructor>>
void nuevaCalificacion(int)
double getNotaMedia()
void imprimirDatos()
14/Mayo/2012
4. Herencia
15
Contenidos
● Extensión mediante herencia.
● Reescritura de métodos.
● Modificador de acceso protected.
● Jerarquía de clases.
● La clase Object.
14/Mayo/2012
4. Herencia
16
Jerarquía de clases
Persona
Estudiante
Empleado
● Conceptualmente, la relación entre las
superclases y las subclases es de tipo es-un.
● Representan concreciones sobre el concepto
de Persona.
14/Mayo/2012
4. Herencia
17
Jerarquía de clases
Persona
Estudiante
Empleado
EmpleadoComision
● La jerarquía puede extenderse a varios niveles.
● No se permite herencia múltiple: una clase
sólo tiene una superclase.
14/Mayo/2012
4. Herencia
18
Ejemplo: EmpleadoComision
public class EmpleadoComision extends Empleado
{
private double porcentajeComision;
private int dineroVentas;
public EmpleadoComision(String nombre, Fecha fechaNacimiento, int dni,
int sueldoBase, double porcentajeComision) {
super(nombre, fechaNacimiento, dni, sueldoBase);
this.porcentajeComision = porcentajeComision;
this.dineroVentas = 0;
}
public void vender(int dineroVenta) { this.dineroVentas += dineroVenta; }
public int getSueldo() {
return sueldoBase + (int) (dineroVentas * porcentajeComision / 100.0);
}
}
Acceso a atributo protected
14/Mayo/2012
4. Herencia
19
Ejemplo: EmpleadoComision
public class TestEmpleadoComision {
public static void main(String[] args) {
EmpleadoComision ec = new EmpleadoComision(“Fuckencio Martinez”,
new Fecha(15, 3, 1979),
123456, 1000, 20);
ec.vender(200);
System.out.print(“Sueldo: %d\n“, ec.getSueldo());
ec.imprimirDatos();
}
}
1040
● Discusión: ¿qué sueldo muestra el método
imprimirDatos?
14/Mayo/2012
4. Herencia
20
Figuras geométricas
public class Cuadrado {
public Cuadrado(Punto posicion, int ancho) {
super(posicion, ancho, ancho);
}
}
Rectangulo
Punto origen;
int ancho;
int alto;
<<constructor>>
Punto getOrigen()
int getAncho()
int getAlto()
double area()
double perimetro()
void dibujar(Ventana v)
Cuadrado
<<constructor>>
14/Mayo/2012
4. Herencia
21
Figuras geométricas
Rectangulo
Punto origen;
int ancho;
int alto;
<<constructor>>
Punto getOrigen()
int getAncho()
int getAlto()
double area()
double perimetro()
void dibujar(Ventana v)
Cuadrado
<<constructor>>
RectanguloColor
Color colorBorde;
<<constructor>>
Color getColorBorde()
void dibujar(Ventana v)
14/Mayo/2012
4. Herencia
22
Figuras geométricas
RectanguloColor
Color colorBorde;
<<constructor>>
Color getColorBorde()
void dibujar(Ventana v)
RectanguloRelleno
Color colorRelleno;
<<constructor>>
Color getColorRelleno()
void dibujar(Ventana v)
14/Mayo/2012
4. Herencia
23
Contenidos
● Extensión mediante herencia.
● Reescritura de métodos.
● Modificador de acceso protected.
● Jerarquía de clases.
● La clase Object.
14/Mayo/2012
4. Herencia
24
La clase Object
● Definida en el paquete java.lang
● Siempre se importa por defecto.
● Es la raíz de toda jerarquía de clases.
● Si una clase no hereda de ninguna otra
mediante extends, automáticamente hereda
de Object.
● Consecuencia: toda clase hereda, directa o
indirectamente, de Object.
14/Mayo/2012
4. Herencia
25
La clase Object
● No tiene ningún atributo público ni protegido.
● Define 11 métodos, que pueden ser
sobreescritos en las subclases.
http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html
● Nosotros veremos:
● toStr
Comentarios de: Herencia - Java y Servicios Web I - Master en Ingeniería Matemática (0)
No hay comentarios