En Java, ¿cuál es la diferencia entre heredar una clase abstracta y heredar una clase normal?
Una clase abstracta puede ser una abstracción de una clase explícita. Los métodos contenidos en él son métodos abstractos sin una implementación concreta de los métodos. Esto logra el propósito de la abstracción: generar subclases y darles algunos atributos y métodos específicos.
Por ejemplo:
Si necesita utilizar las clases Apple y Pear en su programa....
Pero encontrarás que estas dos clases tienen los mismos atributos y métodos (atributo: ambas tienen un núcleo. Método: ambas deben pelarse y comerse...). Entonces puedes crear la clase abstracta "Fruta" y definir todas estas mismas cosas en esa clase. Luego tus 2 subclases simplemente definen las otras cosas necesarias (sabor, precio...).
Ventajas: Cuando necesitas realizar cambios o adiciones nuevas y similares a Apples and Pears. Ahora puedes realizar cambios directamente en sus súper frutas.