So che l'overloading utilizza il binding statico e l'override utilizza l'associazione dinamica. Ma cosa succede se sono mescolati? In base a this tutorial, per risolvere le chiamate di metodo, il binding statico utilizza le informazioni sul tipo mentre il bind dinamico utilizza le informazioni oggetto reali.caso: legame statico? legame dinamico?
Quindi, l'associazione statica si verifica nel seguente esempio per determinare quale metodo sort()
da richiamare?
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");
}
}
ps: Il risultato è: Child#sort(Collection c) is invoked
Qual è l'output? –