Las clases abstractas se utilizan cuando quieres tener una base que implemente el comportamiento general de un grupo de clases, con el objetivo de no repetir la implementación en cada una de las clases pertenecientes al grupo, pero al mismo tiempo quieres dejar abiertas las partes que son específicas a cada clase.
Java, siendo un lenguaje de programación orientada a objetos (POO), introduce el concepto de interfaz para definir tipos abstractos. Las interfaces sirven para escribir código que sea mantenible, reutilizable, y flexible.
La herencia en Java permite que ciertas propiedades y/o métodos puedan ser pasados de una clase (llamada clase padre) a otra clase (llamada clase hija), para que esta última pueda utilizar dichas propiedades y métodos sin tener que implementarlos nuevamente.
El polimorfismo es uno de los conceptos fundamentales de la programación orientada a objetos y es una de las características principales de Java.
El polimorfismo permite que un objeto pueda tomar varias formas o comportarse de diferentes maneras según el contexto en el que se utilice.
La clase es uno de los elementos fundamentales de los programas en Java. En una clase se definen las propiedades y el comportamiento de una unidad de software, conocida como objeto.