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.