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