Я все еще немного запутался в отношении разницы между статическим и динамическим. Из того, что я знаю, динамический использует объект, в то время как статический тип использования и этот динамический разрешается во время выполнения, а статический - во время компиляции. поэтому не следует ли this.lastName.compareTo(s1.lastName) использовать вместо этого динамическую привязку?
key.compareTo(list[position-1]) использовать динамическую привязку
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;
}
}
Почему (this.lastName.compareTo(s1.lastName)) использует статическую привязку?
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??
}
}
lastName
этоString
? Если это так, посколькуString
является окончательным, его нельзя расширить, поэтому ни один из его методов не может быть переопределен. Следовательно, реализация известна во время компиляции. - person azurefrog   schedule 10.03.2017