Metodología de la Programación Herencia F. J. Martı́n Mateos Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Metodología de la Programación - Tema 5 – p. 1/12 Composición • Una clase tiene datos miembro que son instancias de otras clases: public class Recta { private Punto p; private Vector v; ... } • Una Recta tiene un Punto y un Vector Metodología de la Programación - Tema 5 – p. 2/12 Herencia • Una clase es como otra y además tiene algún tipo de característica propia que la distingue • Ejemplo: Un Empleado tiene un nombre, un sueldo y un número de empleado • Un Ejecutivo es un Empleado que tiene asignado un presupuesto • • Empleado es la clase base o superclase • Ejecutivo es la clase derivada o subclase Metodología de la Programación - Tema 5 – p. 3/12 Herencia: Ejemplo • Clase Empleado: public class Empleado { String nombre; int numEmpleado, sueldo; static private int contador = 0; public void aumentarSueldo ( int porcentaje ) { sueldo += sueldo * porcentaje / 100; } public String toString() { return nombre + " (" + numEmpleado + ") >" + sueldo; } } Metodología de la Programación - Tema 5 – p. 4/12 Herencia: Ejemplo • Clases derivadas: Sintaxis public class Subclase extends Superclase { ... } Metodología de la Programación - Tema 5 – p. 5/12 Herencia: Ejemplo • Clases derivadas: Sintaxis public class Subclase extends Superclase { ... } • Nombre de la clase derivada Metodología de la Programación - Tema 5 – p. 5/12 Herencia: Ejemplo • Clases derivadas: Sintaxis public class Subclase extends Superclase { ... } Nombre de la clase derivada • Relación de herencia: extends • Metodología de la Programación - Tema 5 – p. 5/12 Herencia: Ejemplo • Clases derivadas: Sintaxis public class Subclase extends Superclase { ... } Nombre de la clase derivada • Relación de herencia: extends • Nombre de la clase base • Metodología de la Programación - Tema 5 – p. 5/12 Herencia: Ejemplo • Clases derivadas: Sintaxis public class Subclase extends Superclase { ... } • Clase Ejecutivo: public class Ejecutivo extends Empleado { int presupuesto; public void asignarPresupuesto ( int p ) { presupuesto = p; } } Metodología de la Programación - Tema 5 – p. 5/12 Herencia: Ejemplo • Ejemplos de uso: Ejecutivo jefe = new Ejecutivo(); jefe.nombre = "Armando Mucho"; jefe.sueldo = 1000; jefe.asignarPresupuesto(1500); jefe.aumentarSueldo(10); jefe // => "Armando Mucho (0) >1100" Empleado c1 = new Empleado(); c1.nombre = "Esteban Poco"; c1.sueldo = 100; c1.asignarPresupuesto(5000); // => Error c1.aumentarSueldo(10); c1.presupuesto c1 // => Error // => "Esteban Poco (0) >110" Metodología de la Programación - Tema 5 – p. 6/12 La referencia this • Referencia al objeto que se está manipulando: this • Ejemplo: public class Empleado { ... public Empleado ( String nombre, int sueldo ) { this.nombre = nombre; this.sueldo = sueldo; numEmpleado = ++contador; } ... } Metodología de la Programación - Tema 5 – p. 7/12 nicialización de clases derivadas • Invocación al constructor de la clase base: super(...) • Ha de aparecer en primer lugar • Ejemplo: public class Ejecutivo extends Empleado { ... public Ejecutivo( String n, int s ) { super(n,s); } ... } Metodología de la Programación - Tema 5 – p. 8/12 La referencia super • Referencia a la clase base: super • Ejemplo: public class Ejecutivo extends Empleado { ... public String toString() { return "Ejecutivo: " + super.toString(); } ... } Metodología de la Programación - Tema 5 – p. 9/12 Modificador de acceso protected • Acceso público para las clases derivadas • Acceso privado para el resto de las clases • Ejemplo: public class Empleado { protected int sueldo; ... } Metodología de la Programación - Tema 5 – p. 10/12 Modificador de uso final • Una clase final no puede extenderse public final class Ejecutivo extends Empleado { ... } • Un método final no puede redefinirse public class Empleado { ... public final void aumentarSueldo ( int p ) { ... } ... } Metodología de la Programación - Tema 5 – p. 11/12 La clase Object • • • • Jerarquía de objetos Raíz de la jerarquía: la clase Object Por defecto todas las clases heredan de Object El método toString se define en la clase Object y es redefinido en las implementaciones de las clases derivadas Metodología de la Programación - Tema 5 – p. 12/12