Abstract classes are generally the only time I use inheritance. For instance, say I have a Store and each store has a type (General Store, Portal Store, Cart Store) that are all stores. I would use an abstract class to define Store such as.
Then, in all my stores, such as GeneralStore, I would extend Store
Sorry if the formatting is hard to read. I wrote the example here instead of an
IDE. Hopefully this gives you some practical ideas on how to use abstract classes. Abstract classes save you a lot of time (unless you just like to type). If you tie an abstract class to an interface ("public abstract Class implements Interface"), you can get even more power through the abstraction of your code!
Cheers,
Al