Generalización / Especialización

Se produce cuando dos o más clases tienen muchas de sus partes en común (atributos y métodos), lo que deriva en la creación de una nueva Clase con todas las características comunes.


En resumen Generalización / Especialización: es la relación de una Clase más general y una Clase más específica.
Se puede decir que:
Persona es una superClase (Padre)
Alumno es una subClase (Hijo)
Docente es una subClase (Hijo)

Herencia
Es el mecanismo mediante el cual se puede definir una Clase (Hijo) sobre la base de otra Clase (Padre) heredando aquellos miembros de la Clase Padre (atributos y métodos) que hayan sido declarados como public, protected o sin especificador de acceso. Brinda a las clases una estructura jerárquica. Si una Clase Padre declara un miembro como protected:
- Permite el acceso al miembro desde el interior de la Clase Hijo y desde una Clase que se encuentra en el mismo paquete.
- Impide el acceso al miembro desde el exterior del paquete.
Las clases Hijo:
- Heredan características de las clases Padre.
- Añaden características específicas que las diferencian.
El Constructor no es un miembro, por tanto las clases Hijo no pueden heredarlo.
Interpretación Gráfica

Declaración de una Clase que hereda de otra:
public Class Hijo extends Padre {
// Cuerpo de la subClase
…
}
Relación “es-un” o “es-una”
Permite establecer una jerarquía de especialización mediante la relación «es-un» o «es-una«.
Teniendo a Animal como nivel superior
un Mamífero es un Animal
un Ave es un Animal
una Vaca es un Mamífero
un Pato es un Ave
Teniendo a Animal como nivel superior
public Class Animal { … }
un Mamífero es un Animal
public Class Mamifero extends Animal { … }
un Ave es un Animal
public Class Ave extends Animal { … }
una Vaca es un Mamífero
public Class Vaca extends Mamifero { … }
un Pato es un Ave
public Class Pato extends Ave { … }
Si una Clase no tiene una Clase Padre explícita, implícitamente su Clase Padre es la Clase Object, que define e implementa un comportamiento requerido por todas las clases dentro del Sistema Java.
En el caso de la clase Animal, sería:
public Class Animal extends Object {…}

Uso de super
El Constructor no es un miembro, por tanto las clases Hijo no pueden heredarlo.
Puede invocarse al constructor de la Clase Padre desde la Clase Hijo utilizando la palabra super de la siguiente forma:
super(argumentos);
Tiene que ser la primera sentencia dentro del Constructor de la Clase Hijo.