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.