Sometimes the same action makes sense for different inputs, like add for two ints, three ints or two doubles. Overloading lets these share one name as long as their parameter lists differ, and the compiler picks the right one. Use it to keep an API simple, like the many println versions. Changing only the return type is not overloading, and it should not be confused with overriding, which happens across a parent and child class.