Polymorphism is one of the core concepts in OOP languages. It describes the concept that different classes can be used with the same interface. Each of these classes can provide its own implementation of the interface. Java supports two kinds of polymorphism. You can overload a method with different sets of parameters
Java handles binding either statically or dynamically. Static binding is done at compile time. This is for methods that can't be overridden, such as static or final methods. Dynamic binding is done at run-time.