Java's implementation of runtime polymorphism is based on dynamic method scheduling, which is a mechanism for calling overloaded methods at runtime rather than at compile time.
The rewriting of methods (overriding) and overloads (overloading) are different manifestations of Java polymorphism.
Overrides are a representation of polymorphism between a parent class and a subclass, and overloading is a representation of polymorphism in a class.
If you define a method in a subclass that has the same name and argument as its parent, we say that the method is overridden, and when the object of the subclass uses this method, the definition in the subclass is called, and for it the definition in the parent class is "masked". If more than one method with the same name is defined in a class, they either have a different number of arguments or have different parameter types, which are called overloads of the method.
The performance of Java polymorphism