I've been looking around for a concrete definition of polymorphism existing in Java. I know that one type of polymorphism comes in the form of over-riding and overloading methods. But for dynamic polymorphism - is it basically when a variable is declared as a superclass type which gives it the ability to take on any other types in the class hierarchy and then later on in the code type cast the variable as a desired subclass?

Any clarification is appreciated.

Thanks! :)