martes, 23 de abril de 2013

Herencia

Hola a todos,
la semana pasada y esta hemos estado trabajando los conceptos de herencia. Hemos visto cómo diseñar nuevas clases a partir de otras para ampliar su funcionalidad. También hemos visto como, en algunas ocasiones, es interesante sacar todos los miembros y métodos comunes de un conjunto de clases y colocarlos en una nueva clase de la que hereden las primeras. En ambos casos estamos reutilizando código.

Cuando heredamos estamos creando una clase que contiene todos los atributos y métodos de la clase padre pero sólo podremos acceder a los públicos y a los protegidos (protected). Además, los constructores no se heredan por lo que si queremos inicializar los miembros heredados a los que no tengamos acceso es fundamental poder ejecutar el constructor del padre. Esto lo hacemos con super en la primera línea del código de nuestros constructores.

También hemos visto que es posible redefinir el comportamiento de los métodos heredados. Las subclases heredan los métodos públicos por lo que no necesitan volver a escribirlos para que sus objetos puedan ejecutarlos. Sin embargo, si los reescribimos tenemos la oportunidad de modificar el comportamiento manteniendo el interface heredado pero haciendo las cosas de otra forma. En cualquier caso, siempre podemos invocar los métodos de la clase padre usando el objeto super.

Por último, os dejo la solución al primer ejercicio de los incluidos en las transparencias de hoy:


public class Persona {
  private String nombre;

  public Persona(String nombre) {
    this.nombre = nombre;
  }

  public String getNombre() {
    return nombre;
  }

  public String suma1mas1() {
    return "2";
  }
}

public class Matemático extends Persona {
  public Matemático(String nombre) {
    super(nombre);
  }

  public String suma1mas1() {
    return "Depende";
  }
}

public class Físico extends Persona {
  public Físico(String nombre) {
    super(nombre);
  }

  public String suma1mas1() {
    return "2.000000001";
  }
}

public class Informático extends Persona {
  public Informático(String nombre) {
    super("El Super-Ingeniero " + nombre);
  }

  public String suma1mas1() {
    return "10";
  }
}

No hay comentarios:

Publicar un comentario