Según definiciones de la palabra abstracto, quiere decir algo que no tiene una realidad propia, que no existe por sí sola, que no pretende representar algo.
Míralo de la siguiente forma: una clase abstracta es como una clase especial que puede tener métodos propios (abstractos o no) dentro (o no tenerlos) pero para llamarlos no necesitas crear un objeto de esta clase; más que nada se usa para unificar datos u operaciones en subclases.
Desde que piensas en una clase abstracta es porque no tienes intención de crear objetos, pero necesitas una clase para llamar métodos, para relacionar información o hacer operaciones en otras clases que se extiendan de ésta.
Si hablamos de que se extienden subclases, entonces es como una clase de mayor jerarquía o más general. Por ejemplo, el clásico de las figuras geométricas. Hay varios tipos de figuras geométricas pero cada una tiene propiedades distintas. Si creamos la clase abstracta FiguraGeometrica, podemos crear un método abstracto Dibujar(). Si creamos una clase hijo, Círculo y la extendemos de la clase abstracta Figura geométrica entonces podremos acceder a ese método Dibujar() y llenarlo con las operaciones respectivas al círculo. No todas las figuras tienen las mismas propiedades, por lo tanto si creáramos una clase Triángulo, entonces en el método Dibujar() la operación sería distinta.
Entonces, podemos concluir que una clase abstracta es igual para todas sus subclases, pero puede usarse de forma distinta en cada una de ellas. Según lo que necesiten se materializa de la forma requerida.
Es un poco complicado de entender y un tanto de explicar, pero mientras más leas y practiques verás que se te queda para toda la vida. :D