overloading in Java

Overloaded methods let you reuse the same method name in a class, but with different arguments (and optionally, a different return type). Overloading a method often means you're being a little nicer to those who call your methods, because your code takes on the burden of coping with different argument types rather than forcing the caller to do conversions prior to invoking your method. 
The rules are simple:
* Overloaded methods MUST change the argument list.
* Overloaded methods CAN change the return type.
* Overloaded methods CAN change the access modifier.
* Overloaded methods CAN declare new or broader checked exceptions.
* A method can be overloaded in the same class or in a subclass.

Order Java uses to choose the right overloaded method
Rule | Example of what will be chosen for glide(1,2)
----- | -----
Exact match by type | public String glide(int i, int j) {} 
Larger primitive type | public String glide(long i, long j) {} 
Autoboxed type | public String glide(Integer i, Integer j) {} 
Varargs | public String glide(int... nums) {}