A ver una clase abstracta es aquella que no se instancia y por tanto no se crean objetos de la misma. Para que sirve te podrás preguntar. Bien sirve para que otras clases hereden sus propiedades. Me explico.
Supongamos que tenemos una empresa y queremos hacer un modelado de clases según el puesto o cargo que ocupen los distintos miembros.
Tendríamos la clase abstracta persona que podría tener los siguientes atributos:
- nombre
- dni
- edad
- antiguedad en la empresa
luego podríamos tener la clase empleado que heredaría los atributos de persona y además podría llevar:
- sede
- turno
- puesto
y por ejemplo otra que podría ser de los directores:
- departamento
- empleados a su cargo
Si te das cuenta ambas clases comparten los atributos genéricos de la clase persona y ambas tienen sus atributos específicos, pero en este caso, crear un objeto instanciando a persona sería insuficiente para resolver nuestro problema, por eso necesitamos esa clase abstracta (genérica) que no se instancia y si instanciamos a director o empleado que son clases derivadas de la clase persona y que heredan sus atributos.
No se si el ejemplo que puse es el más correcto y no se si me expliqué del todo bien pero eso es más o menos la idea