so reading more certain IOC implementation (dependency injection) is certainly an usage of dynamic polymorphism. So certainly these (#1 and #2) are different concepts, but they do have some common grounds. For these two we can never say one concept is superset of the other.
From wiki pages
Implementation techniques (section of IOC)
In object-oriented programming, there are several basic techniques to implement inversion of control. These are:
-1- Using a factory pattern
-2- Using a service locator pattern
-3- Using a dependency injection, for example:
-a- A constructor injection
-b- Parameter injection
-c- A setter injection
-d- An interface injection
-4- Using a contextualized lookup
-5- Using Template method design pattern
-6- Using strategy design pattern
Dependency injection is something which is based on the idea of Runtime/Dynamic polymorphism