UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

17
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón

Transcript of UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

Page 1: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

UNIDAD VIRecursos esenciales de Java

LSC. Natalia Rodríguez Castellón

Page 2: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

Herencia La herencia es la relación que existe entre dos

clases, en la que la clase denominada derivada se crea a partir de otra ya existente, denominada clase base.

En Java, todas las clases deben derivar de alguna clase. La clase más alta, la clase de la que todas las demás descienden, es la clase Object, definida en java.lang. Object es la raíz de la herencia de todas las clases.

La herencia o extensión de clases es comúnmente utilizada para la especialización, donde la clase extendida (derivada) define su nuevo comportamiento y por tanto se convierte en una versión especializada de su superclase.

Page 3: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

En java se debe incluir la palabra reservada extends en la declaración de la clase derivada. Lo que produce que todos los miembros no privados (prívate) en la clase base sean heredados en la clase derivada.

public class nombre_claseDerivada extends nombre_claseBase {

Page 4: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

La nueva clase, a la que se denomina subclase, puede poseer atributos y métodos que no existan en la clase original.

Los objetos de la nueva clase heredan los atributos y los métodos de la clase original(superclase)

Page 5: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

Ejemplo

Page 6: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

Trabajador es una clase generica que sirve para almacenar datos como : nombre, direccion, numero de telefono, o el numero de seg.social de un trabajador.

Empleado es una clase especializada para representar los empleados que tienen una nomina mensual o semanal

Consultor es una clase especializada para representar a aquellos trabajadores que cobran por horas(honorarios).

Page 7: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

Las subclases heredan variables miembro declaradas:

• public • protected • sin especificador de acceso (siempre que la

subclase esté en el mismo paquete que la clase).

Las subclases NO heredan variables miembro declaradas:

• private • con el mismo nombre que en la superclase.

La variable miembro de la subclase se dice que oculta a la variable miembro de la superclase.

Page 8: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
Page 9: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

Las clases Empleado y Consultor además de los atributos y de las

operaciones que definen heredan de la clase Trabajador todos sus atributos y operaciones.

Page 10: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

Ejemploclass Empleado { String nombre; int numEmpleado , sueldo;

static private int contador = 0;

Empleado(String nombre, int sueldo) { this.nombre = nombre; this.sueldo = sueldo; numEmpleado = ++contador; }

public void aumentarSueldo(int porcentaje) { sueldo += (int)(sueldo * aumento / 100); }

public String toString() { return "Num. empleado " + numEmpleado + " Nombre: " + nombre + " Sueldo: " + sueldo; }}

Page 11: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

class Ejecutivo extends Empleado { int presupuesto; void asignarPresupuesto(int p) { presupuesto = p; }}

A Empleado se le llama clase base o superclase y a Ejecutivo clase derivada o subclase.

Los objetos de las clases derivadas se crean igual que los de la clase base y pueden acceder tanto sus datos y métodos como a los de la clase base. Por ejemplo:

Page 12: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

Creación de un objetoEjecutivo jefe = new Ejecutivo( "Armando Mucho", 1000);jefe.asignarPresupuesto(1500);jefe.aumentarSueldo(5);

Page 13: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

Ocultación de atributos

Como se mencionó anteriormente, las variables miembros definidas en la subclase ocultan las variables miembro que tienen el mismo nombre en la superclase.

Como esta característica del lenguaje Java es poderosa y conveniente, puede ser una fuente de errores: ocultar una variable miembro puede hacerse deliberadamente o por accidente. Entonces, cuando nombres tus variables miembro se cuidadoso y oculta sólo las variables miembro que realmente deseas ocultar.

Page 14: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

Redefinición de métodos. El uso de super.Además se podría pensar en redefinir algunos métodos de la clase base pero haciendo que métodos con el mismo nombre y características se comporten de forma distinta. Por ejemplo podríamos pensar en rediseñar el método toString de la clase Empleado añadiendo las características propias de la clase Ejecutivo. Así se podría poner:

Page 15: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

class Ejecutivo extends Empleado { int presupuesto;

void asignarPresupuesto(int p) { presupuesto = p; }

public String toString() { String s = super.toString(); s = s + " Presupuesto: " + presupuesto; return s; }}

Page 16: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

Inicialización de clases derivadas Cuando se crea un objeto de una clase derivada

se crea implícitamente un objeto de la clase base que se inicializa con su constructor correspondiente. Si en la creación del objeto se usa el constructor, entonces se produce una llamada implícita al constructor para la clase base. Pero si se usan otros constructores es necesario invocarlos explícitamente.

En nuestro ejemplo dado que la clase método define un constructor, necesitaremos también un constructor para la clase Ejecutivo, que podemos completar así:

Page 17: UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.

class Ejecutivo extends Empleado { int presupuesto;

Ejecutivo (String n, int s) { super(n,s); }

void asignarPresupuesto(int p) { presupuesto = p; }

public String toString() { String s = super.toString(); s = s + " Presupuesto: " + presupuesto; return s; }}

El constructor de Ejecutivo invoca directamente al constructor de Empleado mediante super(argumentos). En caso de resultar necesaria la invocación al constructor de la superclase debe ser la primera sentencia del constructor de la subclase.