Override: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
ho sostituito dovrebbebbe con dovrebbe
ValterVBot (discussione | contributi)
m tag source deprecati, replaced: <source lang= → <syntaxhighlight lang= (6), </source> → </syntaxhighlight> (6)
Riga 8:
Definiamo ora la prima classe, <code>Punto</code>:
 
<sourcesyntaxhighlight lang="Java">
public class Punto {
private int a, b;
Riga 39:
 
}
</syntaxhighlight>
</source>
 
Ora implementiamo invece la classe <code>Punto3D</code> che eredita dalla classe <code>Punto</code>
 
<sourcesyntaxhighlight lang="Java">
public class Punto3D extends Punto {
private int c;
Riga 66:
 
}
</syntaxhighlight>
</source>
 
È stato possibile ridefinire il blocco di codice del metodo <code>distanza_origine()</code> per introdurre la terza coordinata (variabile c), affinché il calcolo della distanza sia eseguito correttamente nella classe <code>Punto3D</code>.
Riga 77:
 
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 <code>Punto</code> e <code>Punto3D</code>, se nella classe <code>Punto</code> fosse presente il seguente metodo:
<sourcesyntaxhighlight lang="Java">
public Punto getAddress() {
return this;
}
</sourcesyntaxhighlight>
allora sarebbe legale implementare il seguente override nella classe <code>Punto3D</code>
<sourcesyntaxhighlight lang="Java">
public Punto3D getAddress() {
return this;
}
</syntaxhighlight>
</source>
== Annotazione sull'override ==
Uno 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:
 
<sourcesyntaxhighlight lang="java">
public class MiaClasse {
...
Riga 99:
}
}
</syntaxhighlight>
</source>
 
è compilato correttamente, ma non sussisterà nessun override in <code>MiaClasse</code>. Il grosso problema è che questo errore si presenterà in fase di esecuzione e non è detto che lo si riesca a correggere velocemente. Per ovviare a questo problema, occorre utilizzare l'annotazione <code> Override </code> presente nel package <code>java.lang.</code>. Tale annotazione serve a marcare i metodi che vogliono essere la riscrittura di metodi ereditati. Essa richiede l'uso di un carattere del tutto nuovo alla sintassi Java: <code>@</code>. Nel nostro esempio, il metodo verrà marcato nel seguente modo:
 
<sourcesyntaxhighlight lang="Java">
public class MiaClasse {
...
Riga 111:
}
}
</syntaxhighlight>
</source>
 
Se si violasse qualche regola dell'override, otterremo un errore direttamente in compilazione. Avere un errore in compilazione, ovviamente, è molto meglio che averlo in fase di esecuzione.