2012-02-04 15 views
5

To jest przykładowy kod:Typ konwersji i sposób przeciążenia

public class OverloadingExample { 
public void display(Object obj){ 
    System.out.println("Inside object"); 
} 

public void display(Double doub){ 
    System.out.println("Inside double"); 
} 

public static void main(String args[]){ 
    new OverloadingExample().display(null); 
} 
} 

wyjściowa:

Wewnątrz podwójna

Czy ktoś proszę mi wyjaśnić, dlaczego przeciążona metoda z Double parametr nazywany jest zamiast tego z Object?

Odpowiedz

6

Tak - ponieważ Double jest bardziej szczegółowy niż Object. Istnieje konwersja z Double na Object, ale nie na odwrót, co czyni ją bardziej szczegółową.

Aby uzyskać więcej informacji, zobacz artykuł section 15.12.2.5 w JLS. Szczegóły są dość trudne do zrozumienia, ale pomaga to:

Nieformalna intuicja polega na tym, że jedna metoda jest bardziej szczegółowa od innej, jeśli inwokacja obsługiwana przez pierwszą metodę może być przekazana drugiej bez kompilacji błąd typu czasu.

Więc każde wezwanie display(Double doub) mogłyby być obsługiwane przez display(Object obj) ale nie na odwrót.

+0

Dzięki. "Nieformalna intuicja polega na tym, że jedna metoda jest bardziej szczegółowa niż inna, jeśli inwokacja obsługiwana przez pierwszą metodę może zostać przekazana drugiej bez żadnego błędu typu kompilacji." – NINCOMPOOP

+0

@noob: Tak, właśnie dodałem ten fragment :) –

Powiązane problemy