Override: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m fix |
Migliorato la pagina |
||
(2 versioni intermedie di 2 utenti non mostrate) | |||
Riga 1:
{{F|programmazione|febbraio 2013}}
{{S|programmazione}}
[[File:Method overriding in subclass.svg|miniatura|Immagine che mostra l{{'}}''override'' di un metodo]]
Nella [[programmazione
== Esempio in
Definiamo ora la prima classe, <code>Punto</code>:
<syntaxhighlight lang="
public class Punto {
private int a, b;
Riga 44:
Ora implementiamo invece la classe <code>Punto3D</code> che eredita dalla classe <code>Punto</code>
<syntaxhighlight lang="
public class Punto3D extends Punto {
}
}
}
}
}
</syntaxhighlight>
È stato possibile ridefinire il blocco di codice del metodo <code>distanza_origine()</code> per introdurre la terza coordinata ([[Variabile (informatica)|variabile]] <code>c</code>), affinché il calcolo della distanza sia eseguito correttamente nella classe <code>Punto3D</code>.
La chiamata al [[Costruttore (informatica)|costruttore]] della [[Superclasse (informatica)|superclasse]] è avvenuta attraverso una [[sintassi]] speciale che sfrutta il
L{{'}}''override'' impone delle regole da seguire:
* Il metodo ridefinito ha la stessa forma del metodo originale della superclasse;
* Il metodo ridefinito nella [[Sottoclasse (informatica)|sottoclasse]] non deve essere meno accessibile del metodo originale della superclasse. Per esempio, se un metodo ereditato è dichiarato protetto, non si può ridefinire privato, semmai pubblico;
* Il tipo di ritorno del metodo deve coincidere con quello del metodo che si sta riscrivendo.
In realtà, dalla [[Java 5|versione 5 di
<syntaxhighlight lang="Java">▼
<syntaxhighlight lang="java" line="1">public Punto getAddress() {
}</syntaxhighlight> ▼
▲</syntaxhighlight>
allora sarebbe legale implementare il seguente L{{'}}''override'' nella classe <code>Punto3D</code>
public Punto3D getAddress() {
</syntaxhighlight>
== 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
<syntaxhighlight lang="java">
Riga 102:
</syntaxhighlight>
è 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 (Java)|annotazione]]
<syntaxhighlight lang="Java">
Riga 113:
}
</syntaxhighlight>
Se si violasse qualche regola dell{{'}}''override'', otterremo un errore direttamente in compilazione
== Note ==
<references/>
== Collegamenti esterni ==
Riga 128 ⟶ 125:
{{Portale|informatica}}
[[Categoria:Java]]
[[Categoria:Programmazione]]
[[Categoria:
|