dissabte, 30 de març del 2013

Sobrecàrrega de métodes en JAVA

En Java, dos o més métodes de la mateixa classe poden compartir el mateix nom sempre i quan la seva signatura ,el número i/o tipus de paràmetre, sigui diferent. Aquesta técnica s'anomena sobrecàrrega de métodes o overloading. Veiem-ne un exemple:

class exempleOl {

    static void metodeCalcular(int x) {

        System.out.println("int");

    }

    static void metodeCalcular(long x) {

        System.out.println("long");

    }

    static void metodeCalcular(float x) {

        System.out.println("float");

    }

    static void metodeCalcular(double x) {

        System.out.println("double");

    }

    public static void main(String[] args) {

        int i = 5;
        long l = 12;
        float d = 5.0f;
        byte b = 2;
        short s = 5;

        metodeCalcular(i);
        metodeCalcular(l);
        metodeCalcular(d);
        metodeCalcular(b);
        metodeCalcular(s);

    }
}
La sortida serà la següent:

int long double int int

L'ordre d'execució és de menor a major tipus de dada. Com no existeix un métode per al tipus primitiu byte o short, el compilador executa el métode del tipus int, ja que int permet encabir valors de tipus byte o short (conversió de tipus).
És per això que quan cridem a metodeCalcular() amb un byte o short com argument, s'executarà metodeCalcular(int x).

Regles per a la sobrecàrrega de métodes:
  • Han de canviar la llista d'arguments (el tipus o número de paràmetres del métode).
  • Poden canviar el tipus de retorn del métode.
  • Poden canviar el modificador d'accés.
  • Poden declarar nous tipus d'excepcions o ampliar-les.
  • Un métode pot ser sobrecarregat en la mateixa classe o en una subclasse.
De la mateixa manera que els métodes, els constructors també poden ser sobrecarregats. Així, podem crear objectes de diferents maneres en funció del constructor cridat alhora d'instanciar una classe.