Well there are two type of Polymorphism... One is static and the other is dynamic.
A static polymorphism is implemented by overloading.
Dynamic polymorphism is implemented by the same way that you said. You create an instance or reference of a super class and initialize it with a sub class. Then you call a method that is overriden in the sub-class. The method which is actually called at run-time is dependent on the actual type of the object stored in reference.
This is an example-
If you execute this program like this java MainClass 1 The output will be Derived1
If you execute this program like this java MainClass 2 The output will be Derived2
If you execute this program with any other argument java MainClass me The output will be Base
So the call to the display method will be resolved at runtime.