Abstract classes have various implementations:
- If a lot of your program logic implementation is of the same sort and follows a common behavior.
- If you have to implement a generalized template for your subclasses to inherit functionality from according to their own requirements.
- If you want to implement planned inheritance hierarchy as well as a good choice for non-leaf classes in class hierarchical structures.
Abstract classes are used tremendously in Java development routines and are generally considered good practice in Java programming. If you're looking to learn java, you should definitely research such coding practices and implements more.