There are many sorting algorithms, but we can write one program to test each of them by treating them all the same - they all sort!
Java has a utility class, Arrays, that contains many static methods. In particular it contains several methods all named sort. These are overloaded versions with different parameter types. However, this doesn't really provide a choice of different kinds of sorting algorithms, just the ability to sort different array types.
To provide sort methods with the exact same parameter, but different implementations requires a different Java technique.
Overloading can't help since the methods are to have the same parameter, but interfaces can.
That is, we can write different classes for each different sorting algorithm with a method named sort. Since each class is a different scope, we can the parameter list can be exactly the same, but the implementation can be different.
Here is the interface:
public interface Sort { public <E extends Comparable<E>> void sort(E[] a); }