Indice | Lezione Precedente – Lezione Successiva |
L’overloading dei metodi, in italiano sovraccaricamento, è il meccanismo con cui Java permette la definizione di più metodi con lo stesso nome. Per poter avere l’overloading l’unica regola da rispettare è quella di avere una lista di argomenti differente, è l’unico elemento utilizzato per distinguere i metodi tra di loro. Il tipo di ritorno e la visibilità, possono essere diversi tra loro ma non sono utilizzati per distinguere i due metodi tra di loro.
Facciamo un esempio:
public class Figura {
public int a;
public double b;
public void setNumero(int num){
a=num;
}
public void setNumero(double num){ // Ok, lista parametri diversa
b=num;
}
public void setNumero(int Num){ // Errore, lista uguale
a=num;
}
public int setNumero(int num){ // Errore, lista uguale
a=num;
return a;
}
public float setNumero(){ // Ok, lista differente
return 3.14;
}
public void setNumero(int num, double num2){ // Errore, il tipo
// di ritorno non é usato per distinguere i metodi
this(num); // Sfruttiamo il sovraccaricamento
b=num2; // Non possiamo riusare this(), può essere usato
// Solo sulla prima riga di ogni metodo
}
}
L’overriding è il meccanismo che permette la sovrapposizione dei metodi di una superclasse da parte di una sottoclasse. Per poter sovrapporre un metodo proveniente da una superclasse bisogna che il nuovo metodo abbia:
- lo stesso nome, lo stesso tipo di ritorno e la stessa lista di parametri;
- visibilità non inferiore (abbiamo visto nelle lezioni precedente ad esempio che private è molto più restrittivo rispetto a public);
- il metodo sovrapposto non può avere problemi di grandezza più grandi del metodo che viene sovrapposto (vedremo in seguito cosa sono questi “problemi” con le eccezioni).
Vediamo qualche esempio:
public class Persona {
public int anni=0; // Verrà ereditato da Maschio, è public
public void setAnni(int anni){
this.anni=anni;
}
}
public class Maschio
extends Persona{
public void setAnni(int anni){ // Tutto uguale, overriding corretto
this.anni=anni*2;
}
public void setAnni(int Years){ // Tutto uguale, overriding corretto
this.anni=anni*2;
}
public void setAnni(double anni){ // Non c'è overriding (lista parametri diversi), ma c'è overloading
//...
}
public int setAnni(int anni){ // Errore, non c'è overriding e neanche overloading (solo lista parametri differente): sovraccaricamento illegale di metodi
this.anni=anni*2;
return this.anni;
}
}
La massima espressione del polimorfismo si ha con l’overriding. L’invocazione virtuale di metodo si ha quando il comportamento di una variabile è determinato in esecuzione in base al tipo di riferimento della variabile, e non a tempo di compilazione.
Nella prossima lezione tratteremo l’operatore super.
Ti piace l’articolo? |
![]() |
Indice | Lezione Precedente – Lezione Successiva |