Clases abstractas
Por este tipo de diseño es que tenemos las clases abstractas, que son pensadas para ser las clases padre de las cuales no se pueden obtener instancias, sino que simplemente sirven como base para las clases más específicas, con ello nos aseguramos de incluir una sola vez todos los métodos que podemos compartir y en las clases hijas las características únicas de las mismas.
Definición
Las clases abstractas como habíamos mencionado no pueden ser instanciadas, ya que su función es proveer una base general para otras clases, es por ello que dentro deben llevar lo que se llama métodos abstractos, que son métodos que no pueden ser utilizados directamente desde la clase abstracta si no que deber ser utilizado a través de las sub-clases.
Veamos en la siguiente imagen una pequeña definición de una clase abstracta:
Este sencillo ejemplo nos ofrece unas lecturas interesantes, primero vemos que en la propia definición de clase hemos colocado la palabra reservada abstract, luego hemos definido las características más generales del objeto, es decir, cosas con las que no se pueda definir aún que es realmente, luego construimos uno de los constructores, en este caso uno que inicializa el atributo fechaCreacion.
Al avanzar un poco más en la lectura de la clase, vemos los llamados métodos abstractos, como podemos notar no están definidos, simplemente indican que tipo de dato deben retornar y su nombre, es por ello que no podemos utilizarlos directamente.
Consideraciones adicionales de las clases abstractas
Un método abstracto no puede estar en una clase que no lo sea, es por ello que cuando heredamos de una clase abstracta debemos implementar y sobrescribir los métodos abstractos, de lo contrario tendremos una clase no funcional.
A pesar que necesitamos de una clase abstracta para poder contener métodos abstractos, no es necesario que una clase abstracta los tenga, es por ello que podemos generar una clase de este estilo sin métodos abstractos para utilizarla como base de otras clases.
Con esto finalizamos este tutorial de Java, a pesar de que estos conceptos se puedan ver muy densos o complejos a simple vista, la abstracción de clases es clave para la creación de programas más eficientes y mejor construidos.