2012-02-04 11 views
5

Este es el código de ejemplo:Conversión de tipo y la sobrecarga de métodos

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); 
} 
} 

Salida:

Dentro doble

¿Puede alguien por favor me explique por qué el método sobrecargado con Double parámetro se denomina en lugar de eso con Object?

Respuesta

6

Sí - porque Double es más específico que Object. Hay una conversión de Double a Object, pero no al revés, que es lo que lo hace más específico.

Consulte section 15.12.2.5 del JLS para obtener más información. Los detalles son bastante difíciles de seguir, pero esto ayuda:

La intuición informal es que un método es más específico que otro si cualquier invocación manejada por el primer método podría pasarse al otro sin una compilación- error de tipo de tiempo

Así que aquí, cualquier invocación de display(Double doub) podría ser manejado por display(Object obj) pero no a la inversa.

+0

Gracias. "La intuición informal es que un método es más específico que otro si cualquier invocación manejada por el primer método podría pasarse a la otra sin un error de tipo de tiempo de compilación". – NINCOMPOOP

+0

@noob: Sí, solo estaba agregando ese bit :) –

Cuestiones relacionadas