I'm still a little confused with regards to the difference between static and dynamic. From what I know dynamic uses object while static use type and that dynamic is resolved during runtime while static is during compile time. so shouldn't this.lastName.compareTo(s1.lastName) use dynamic binding instead?
key.compareTo(list[position-1]) use dynamic binding
public static void insertionSort (Comparable[] list)
{
    for (int index = 1; index < list.length; index++)
    {
        Comparable key = list[index];
        int position = index;
        while (position > 0 && key.compareTo(list[position-1]) < 0) // using dynamic binding
        {
            list[position] = list[position-1];
            position--;
        }
            list[position] = key;
    }
}
Why does (this.lastName.compareTo(s1.lastName)) use static binding?
private String firstName;
private String lastName;
private int totalSales;
@Override
public int compareTo(Object o) {
    SalePerson s1 = (SalePerson)o;
    if (this.totalSales > s1.getTotalSales())
    {
        return 1;
    }
    else if (this.totalSales < s1.getTotalSales())
    {
        return -1;
    }
    else //if they are equal
    {
        return (this.lastName.compareTo(s1.lastName)); //why is this static binding??
    }
}
 
     
    