profemacon@gmail.com http://pablomacon.wixsite.com/home/ Herencia - Análisis A nivel conceptual, la Herencia define una relación "ser" entre dos Clases de Objetos, las cuales se denominan clase base (o superclase) y clase derivada (o subclase). Herencia - Análisis Esta relación significa que todos los objetos de la clase derivada son también objetos de la clase base. Sin embargo, no se cumple que todos los objetos de la clase base son también objetos de la clase derivada. Herencia - Análisis A la hora de detectar la presencia de una asociación de Herencia en una realidad, se aplican dos estrategias llamadas generalización y la especialización. Herencia - Análisis Generalización: Consiste en introducir una nueva clase base que reúna atributos comunes a varias Clases de la realidad. Auto, Camión, Moto son Vehículos Estudiante, Profesor, Adscripto son Personas Herencia - Análisis Especialización: Consiste en agregar una nueva clase derivada de otra ya existente. De la clase Auto, puedo obtener Descapotable. De la clase Casa puedo derivar Chalet Herencia - Análisis Las clases derivadas reciben (heredan) todos los atributos y métodos de la superclase: Si un objeto Persona tiene nombre y apellido, un objeto Estudiante tendrá nombre y apellido. Herencia - Diseño En el diagrama de clases UML una relación de herencia se representa con un triángulo que apunta desde la clase derivada hacia la superclase. Herencia - Diseño Puedo derivar varias clases de una misma superclase Herencia - Diseño Se puede formar una jerarquía de varios niveles Herencia - Implementación En cuanto a la implementación en Java, una relación de herencia es una de las formas en que podemos re-utilizar código. Una clase derivada no necesita re-escribir todo el código que ya ha sido escrito para la clase base. Herencia - Implementación public class Vehiculo { private int id; private String marca; private String modelo; … } Herencia - Implementación public class Vehiculo { public Vehiculo (int id, String mar, String mod) { this.id = id; this.marca = mar; this.modelo = mod; ... Herencia - Implementación public class Vehiculo { … getters … setters … toString() .... } Herencia - Implementación public class Auto extends Vehiculo { private int cantPuertas; public Auto (int id, String mar, String mod, int cantP); super (id, mar, mod); Se invoca al this.cantPuertas = cantP; constructor de la clase base } Herencia - Implementación Una vez que hemos implementado la clase base, podemos hacer referencia a cualquier elemento o método de la superclase, mediante la palabra clave super public String toString(){ return super.toString + “algo nuevo”; }