OverrideNella programmazione orientata agli oggetti, l'override è un'operazione di riscrittura di un metodo ereditato. In essa assume notevole importanza la possibilità di creare classi a partire da classi già esistenti (ereditarietà). La classe nuova che eredita quella esistente può avere metodi ereditati che possono essere riscritti per le nuove necessità. Esempio in JavaDefiniamo ora la prima classe, public class Punto {
private int a, b;
public Punto (int a, int b) {
this.a = a;
this.b = b;
}
public void setA (int a) {
this.a = a;
}
public int getA () {
return a;
}
public void setB (int b) {
this.b = b;
}
public int getB () {
return b;
}
public double distanza_origine () {
int x = (a*a)+(b*b);
return Math.sqrt(x);
}
}
Ora implementiamo invece la classe public class Punto3D extends Punto {
private int c;
public Punto3D (int a, int b, int c) {
super (a, b);
this.c = c;
}
public void setC (int c) {
this.c = c;
}
public int getC () {
return c;
}
public double distanza_origine () {
int x = (getA() * getA()) + (getB() * getB()) + (c * c);
return Math.sqrt(x);
}
}
È stato possibile ridefinire il blocco di codice del metodo L'override impone delle regole da seguire:
In realtà, dalla versione 5 di Java in poi, il tipo di ritorno del metodo può coincidere anche con una sottoclasse del tipo di ritorno del metodo originale. In questo caso si parla di "tipo di ritorno covariante". Per esempio, sempre considerando il rapporto di ereditarietà che sussiste tra le classi public Punto getAddress() {
return this;
}
allora sarebbe legale implementare il seguente L'override nella classe public Punto3D getAddress() {
return this;
}
Annotazione sull'overrideUno degli errori più comuni che può commettere un programmatore è sbagliare un override. Ovvero ridefinire in maniera non corretta un metodo che si vuole riscrivere in una sottoclasse, magari digitando una lettera minuscola piuttosto che maiuscola, o sbagliando il numero di parametri in input. in tali casi il compilatore non segnalerà errori, dal momento che non può intuire il tentativo di override in atto. Quindi, per esempio, il seguente codice in Java: public class MiaClasse {
...
public String tostring() { // per avere l'override, si dovrebbe scrivere toString e non tostring
...
}
}
è compilato correttamente, ma non sussisterà nessun override in public class MiaClasse {
...
@Override
public String toString() {
...
}
}
Se si violasse qualche regola dell'override, otterremo un errore direttamente in compilazione. Note
Collegamenti esterni
|
Portal di Ensiklopedia Dunia