A way of expressing similar, but different objects. For example in object oriented programming you might have a Vehicle class that specifies a method to move and any method that operates on a Vehicle can call the move method. However, move might be implemented differently for classes that inherit Vehicle e.g. an Airplane or a Submarine.