Differenza tra sovrascrittura e sovraccarico

Override vs Sovraccarico

Il metodo Overriding e il metodo Overloading sono due concetti / tecniche / funzionalità trovati in alcuni linguaggi di programmazione. Entrambi i concetti consentono al programmatore di fornire implementazioni diverse per metodi con lo stesso nome. L'override del metodo consente al programmatore di fornire un'implementazione alternativa all'interno di una sottoclasse a un metodo già definito all'interno della sua super classe. L'overloading del metodo consente al programmatore di fornire implementazioni diverse a più metodi con lo stesso nome (all'interno della stessa classe).

Cos'è Override?

Come accennato in precedenza, una classe può estendere una classe super o una classe genitore, in linguaggi di programmazione orientati agli oggetti. Una classe figlio può avere i propri metodi o può opzionalmente avere le sue implementazioni su metodi già definiti nella sua classe genitore (o in una delle sue classi non genitoriali). Quindi, quando succede quest'ultimo, si chiama metodo prioritario. In altre parole, se la classe figlia fornisce un'implementazione a un metodo con la stessa firma e tipo di restituzione di un metodo già definito in una delle sue classi padre, tale metodo viene sovrascritto (sostituito) dall'implementazione della classe figlio . Pertanto, se esiste un metodo sottoposto a override in una classe, il sistema runtime dovrà decidere quale implementazione del metodo utilizzare. Questo problema viene risolto esaminando il tipo esatto di oggetto utilizzato per richiamarlo. Se un oggetto della classe genitore viene utilizzato per invocare il metodo sottoposto a override, viene utilizzata l'implementazione nella classe genitore. Allo stesso modo, se è un oggetto della classe figlio che viene utilizzato, viene utilizzata l'implementazione della classe figlia. I moderni linguaggi di programmazione come Java, Eifell, C ++ e Python consentono l'override dei metodi.

Cos'è il sovraccarico?

L'overloading del metodo è una funzionalità fornita da alcuni linguaggi di programmazione per creare più di un metodo con lo stesso nome, ma con diversi tipi di input e output. Nei moderni linguaggi di programmazione come Java, C #, C ++ e VB.NET, questa funzione è disponibile. È possibile sovraccaricare un metodo creando un altro metodo con lo stesso nome ma con una firma di metodo diversa o un tipo di ritorno diverso (o entrambi). Ad esempio, se si dispone di method1 (type1 t1) e method1 (type2 t2) all'interno della stessa classe, vengono sovraccaricati. Quindi il sistema dovrà decidere quale deve essere eseguito quando viene chiamato. Questa differenziazione viene effettuata osservando il tipo del parametro o dei parametri passati al metodo. Se l'argomento è di tipo 1, viene chiamata la prima implementazione, mentre se è di tipo2, viene chiamata la seconda implementazione.

Qual è la differenza tra Override e Overloading?

Sebbene l'override del metodo e l'overloading del metodo siano utilizzati per fornire un metodo con diverse implementazioni, vi sono differenze chiave tra questi due concetti / tecniche. Prima di tutto, i soggetti sottoposti a override di metodo rimangono sempre all'interno di classi diverse, mentre i soggetti con overload di metodi rimangono all'interno della stessa classe. Ciò significa che l'override è possibile solo nei linguaggi di programmazione orientati agli oggetti che consentono l'ereditarietà, mentre il sovraccarico può essere disponibile anche in un linguaggio non orientato agli oggetti. In altre parole, si ridefinisce un metodo nella super classe ma si sovraccarica un metodo all'interno della propria classe.

Un'altra differenza è che i metodi sottoposti a override hanno lo stesso nome del metodo, la firma del metodo e il tipo restituito, ma i metodi sovraccaricati devono differire sia nella firma che nel tipo restituito (il nome dovrebbe essere lo stesso). Per differenziare tra due metodi sovrascritti, il tipo esatto di oggetto che viene utilizzato per richiamare l'id dei metodi utilizzato, mentre per distinguere tra due metodi sovraccaricati vengono utilizzati i tipi dei parametri. Un'altra differenza fondamentale è che l'overloading viene risolto in fase di compilazione, mentre l'override viene risolto in fase di runtime.