An abstract class defines the inputs, outputs, and provides an implementation of that work. Consider a kettle: an “abstract kettle” would define that water must go in, must be able to start boiling, and must go out; it will also provide specific ways in which this happens.

Thus, any instance of a kettle that inherits from this abstract kettle will have those methods defined, with the ability to define further methods. One can think of this as the base-model, and other instances that implement further methods are fancier.

see Abstraction