Sovraccarico dei metodi.


Java Sun

Earthweb
(ex Gamelan)

Jars

Java Boutique

Java Center

PIP






  JSem: 2.4

   E' possibile definire più costruttori per una stessa classe, avranno tutti lo stesso nome ma saranno differenziati da liste di parametri diverse.
Più generalmente è possibile definire, in una stessa classe, più metodi con lo stesso nome, ma con liste dei parametri diverse.
Questo procedimento si chiama sovraccarico (overloading) dei metodi.
Sarà la lista dei parametri ad indicare al compilatore quale versione del metodo usare. E' proprio la lista dei parametri (detta anche segnatura), e non il tipo di ritorno, che distingue le varie versioni del metodo.

Il sovraccarico è un modo di implementare il polimorfismo.


   Facciamo un esempio semplice, definendo due costruttori per la nostra classe Rettangolo e due metodi per calcolare l'area.

import java.awt.*;

class Rettangolo{
	
	int latoa;
	int latob;
	
//primo costruttore
	Rettangolo(int a, int b){
	latoa = a;
	latob = b;
	}
	
//secondo costruttore, per i quadrati
	Rettangolo(int q){
	latoa = latob = q;
	}
	
//metodo che calcola l'area
 int area(){
	return latoa*latob;
	}
//metodo che calcola e stampa l'area
int area(Graphics g, int y){
	g.drawString("L'area vale: " + latoa*latob,5,y);
	return latoa*latob;
	}
}

Abbiamo quindi due costruttori, uno per i rettangoli "generici" e uno per i quadrati; abbiamo anche due metodi per calcolare l'area, uno che restituisce l'area e l'altro (con due parametri) che stampa l'area sullo schermo. Abbiamo importato il pacchetto java.awt perchè la classe usa un oggetto Graphics come parametro del secondo metodo. Osservare che nella seconda versione del metodo, il tipo di ritorno è richiesto cioè il seguente codice:
area(Graphics g, int y){
g.drawString("L'area vale: " + latoa*latob,5,y);
}

fornisce un errore in fase di compilazione. Vediamo questa classe all'opera:

import java.applet.*;
import java.awt.*;

public class RettDemo4 extends Applet{

Rettangolo r = new Rettangolo(4,5);
Rettangolo q = new Rettangolo(10);

public void paint(Graphics g){
	g.drawString("L'area di r è: "+r.area(),5,20);
	g.drawString("L'area di q è: "+q.area(),5,40);
	r.area(g,60);
	q.area(g,80);
	}
}




 next		content		previous