Override: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Annullate le modifiche di 93.41.60.245 (discussione), riportata alla versione precedente di ValterVBot Etichetta: Rollback |
Migliorato la pagina |
||
(9 versioni intermedie di 4 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 43 ⟶ 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 101 ⟶ 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 112 ⟶ 113:
}
</syntaxhighlight>
Se si violasse qualche regola dell{{'}}''override'', otterremo un errore direttamente in compilazione
== Note ==
<references/>
== Collegamenti esterni ==
*{{Collegamenti esterni}}
* {{FOLDOC|overriding|overriding}}
{{Controllo di autorità}}
▲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.
{{Portale|informatica}}
[[Categoria:Java]]
[[Categoria:Programmazione]]
[[Categoria:Terminologia informatica]]
|