Method overloading in Java allows methods within a class to have the same name but different parameters. It increases program readability. Method overloading can be achieved by changing the number of arguments or their data types but not by changing the return type alone. The main method can also be overloaded. Type promotion may occur when no exact match for method parameters is found. Ambiguity can arise if multiple methods are applicable through an equal number of promotions.