Abstract classes are classes cannot be instantiated and when another class inherits them the inheriting class is forced to implement any abstract members from the abstract class. Abstract classes represent more generic forms of a thing such as a Person or a Vehicle or a Building.
We don't want an Employee type to be instantiated in our code anywhere. Employees represent more of an idea than a concrete object, which makes the class abstract. To ensure that only descendant types are instantiated, then, we will define the Employee class as abstract by adding the abstract keyword to the class header.
This will work just fine for us because in this example we are already instantiating only descendant classes. Let's say, though, that we make our Food class abstract. This will cause errors because we are trying to instantiate an "idea" rather than something that should be an object.