Cos'è il metodo Override?

La sostituzione del metodo viene utilizzata nella programmazione orientata agli oggetti all'interno di una gerarchia di ereditarietà e si verifica quando un metodo definito in una superclasse viene ridefinito in una sottoclasse. Di solito, il metodo della sottoclasse fa qualcosa di diverso rispetto al metodo della superclasse o si espande su una capacità della superclasse, ma non è così. La sostituzione del metodo si verifica ogni volta che un metodo di superclasse viene ridefinito in una sottoclasse, indipendentemente dal contenuto del metodo ridefinito. Le firme del metodo ridefinito devono essere esattamente le stesse.

Ad esempio, una classe A potrebbe contenere un metodo chiamato "doSomething" e questo metodo non accetta parametri di input. Inoltre, le classi B e C potrebbero essere sottoclassi della classe A. La classe B potrebbe contenere un metodo chiamato "doSomething", che non accetta parametri di input, e la classe C potrebbe contenere un metodo "doSomething" che accetta un numero come parametro di input. In questo esempio, solo la classe B dimostrerebbe l'override del metodo, poiché il suo metodo "doSomething" ha la stessa firma del metodo della sua superclasse, classe A. Il metodo "doSomething" nella classe C, d'altra parte, dimostra il sovraccarico del metodo perché crea un metodo completamente nuovo.

L'ereditarietà virtuale in C ++ è un altro esempio di override del metodo. I metodi virtuali nelle superclassi potrebbero essere o non essere implementati, ma qualsiasi definizione di sottoclasse è un'istanza di override del metodo. Quando un metodo viene sovrascritto in una sottoclasse, il metodo della superclasse non viene chiamato a meno che non sia invocato esplicitamente. Si dice spesso che questo modo specifico di chiamare un metodo ignorato "nasconda" l'implementazione della superclasse.

Sebbene l'override del metodo sia molto flessibile, non tutti i metodi possono essere ignorati e ci sono momenti in cui questa rigidità potrebbe essere preferibile. Sia in Java che in C ++, è possibile applicare parole chiave specifiche nelle firme dei metodi per impedire che un metodo venga sovrascritto in una sottoclasse. Per fare ciò, Java usa la parola chiave "final" e C ++ usa la parola chiave "const". Prevenire l'override del metodo può essere utile se una determinata funzione deve essere sempre invariata in un albero ereditario.

In generale, non è necessario ignorare metodi semplici che ottengono piccoli dati. I casi che tendono maggiormente a trarre vantaggio dalla sostituzione sono quando una sottoclasse mira ad aggiungere funzionalità a un metodo superclasse senza creare un metodo completamente nuovo per farlo. Anche i casi insoliti in cui un metodo deve essere completamente rifatto per un tipo specifico di oggetto potrebbero trarre vantaggio da questa tecnica. Ogni volta che un metodo viene ignorato, è importante che il programmatore commenti adeguatamente sia i metodi della superclasse che quelli della sottoclasse. Idealmente, questi commenti dovrebbero chiarire cosa fa ogni variante del metodo, nonché come e perché differiscono.

ALTRE LINGUE

Questo articolo è stato utile? Grazie per il feedback Grazie per il feedback

Come possiamo aiutare? Come possiamo aiutare?