Runtime polymorphism is a kind of polymorphism that involves dynamic typing. This means that objects can be manipulated as if they were a single type. This is similar to static polymorphism where objects are manipulated as if they had a single type, regardless of their underlying type. It is one of the five major software design principles. It is used with object-oriented programming. It means that a variable can refer to different objects depending upon the run time conditions. For example, a variable may be used to refer to a Dog object when the variable is declared, but during the execution of the program, the variable may refer to a Cat object. It is an automatic type conversion. For example, if you have an integer variable i, and you assign a string value to it, it will become a string variable.