an example can be a car class. you could create a ferrari class which would inherit from car, and also make a toyota class which would also inherit from car. this way, all the fields and methods (drive method, brake method, color field...) would also be inside of ferrari and toyota, and you wouldn't need to copy the code twice. however, maybe inside of car you could have a brand field. this brand field would be equal to nothing, but inside of ferrari the field might be equal to "ferrari" and in toyota to "toyota". of course, you could not just create a car, because otherwise that field would be missing. in order to prevent people from just creating a car, you turn the car into an abstract class.