Mam zajęcia z zaawansowanego programowania na mojej uczelni i mam problem ze zrozumieniem działania tego kodu.Zaawansowany polimorfizm w Javie
public final class GenericClass<T> {
private void overloadedMethod(Collection<?> o) {
System.out.println("Collection<?>");
}
private void overloadedMethod(List<Number> o) {
System.out.println("List<Number>");
}
private void overloadedMethod(ArrayList<Integer> o) {
System.out.println("ArrayList<Integer>");
}
public void method(List<T> l) {
overloadedMethod(l);
}
public static void main(String[] args) {
GenericClass<Integer> test = new GenericClass<Integer>();
test.method(new ArrayList<Integer>());
}
}
Dlaczego ten kod print "Kolekcja <? >"?
dzięki, odpowiedź wyjaśnia jeszcze dlaczego po zmianie 'overloadedMethod (List o)' na 'overloadedMethod (Lista > o)' wypisuje programu 'Lista ' zamiast 'Collection >' –
z najważniejsze jest twoje ostatnie zdanie. To wyjaśnia wszystko! –
Bardzo dobra odpowiedź, ale -1, aby zwrócić twoją uwagę na fakt, że deklarowanie "GenericClass" zamiast tego powoduje to samo wezwanie do 'overloadedMethod (Collection >)'. Coś tu się dzieje. –