Я знаю, что перегрузка использует статическое связывание и переопределение использует динамическое связывание. Но что, если они смешаны? В соответствии с this tutorial для разрешения вызовов методов статическая привязка использует информацию о типе, тогда как динамическое связывание использует фактическую информацию об объекте.case: статическая привязка? динамическое связывание?
Итак, статическое связывание происходит в следующем примере, чтобы определить, какой метод sort()
вызывать?
public class TestStaticAndDynamicBinding {
@SuppressWarnings("rawtypes")
public static void main(String[] args) {
Parent p = new Child();
Collection c = new HashSet();
p.sort(c);
}
}
.
public class Parent {
public void sort(Collection c) {
System.out.println("Parent#sort(Collection c) is invoked");
}
public void sort(HashSet c) {
System.out.println("Parent#sort(HashSet c) is invoked");
}
}
.
public class Child extends Parent {
public void sort(Collection c) {
System.out.println("Child#sort(Collection c) is invoked");
}
public void sort(HashSet c) {
System.out.println("Child#sort(HashSet c) is invoked");
}
}
пс: Выход: Child#sort(Collection c) is invoked
Какой выход? –