You can also see an answer to a previous question about the Math class and method overloading.
Methods are overloaded if there are two methods in the SAME class with the same name, but different signatures. Different signatures means different parameters lists in the number of parameters, the types or both.
The headers for the two substring methods in the String class are:
public String substring(int beginIndex) and public String substring(int beginIndex, int endIndex) which obviously differ in the number of parameters.
See my previous answer about the math class which has overloaded methods because the parameters differ in type.