OO systems that provide the concept of an Interface
support swapping out implementations transparently. Java specifically does this Collection
<- List
<- ArrayList
, LinkedList
, etc.
C++ supports this as well. Python supports this. C would not support this directly.
Dependency Injection in the languages that support this would making plugging concrete implementations in and out configurable as well.