Use an abstract class if you have some functionality that you want it’s subclasses to have . For instance, if you have a set of functions that you want all of the base abstract class’s subclasses to have. Use an interface if you just want a general contract on behavior/functionality.