Override vs sovraccarico
Il metodo Overriding e il metodo Overloading sono due concetti / tecniche / funzionalità presenti in alcuni linguaggi di programmazione. Entrambi i concetti consentono al programmatore di fornire diverse implementazioni 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. Il sovraccarico dei metodi consente al programmatore di fornire diverse implementazioni a più metodi con lo stesso nome (all'interno della stessa classe).
Cos'è l'override?
Come accennato in precedenza, una classe può estendere una super classe o una classe genitore, in linguaggi di programmazione orientati agli oggetti. Una classe figlia può avere i propri metodi o può opzionalmente avere le proprie implementazioni per metodi già definiti nella sua classe genitore (o in una delle sue classi primarie). Quindi, quando si verifica quest'ultimo, viene chiamato override del metodo. In altre parole, se la classe figlia fornisce un'implementazione a un metodo con la stessa firma e tipo restituito di un metodo già definito in una delle sue classi genitore, si dice che quel metodo sia sovrascritto (sostituito) dall'implementazione della classe figlia. Quindi, se c'è un metodo sovrascritto in una classe, il sistema runtime dovrà decidere quale implementazione del metodo viene utilizzata. 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 sovrascritto, viene utilizzata l'implementazione nella classe genitore. Allo stesso modo, se viene utilizzato un oggetto della classe figlia, viene utilizzata l'implementazione della classe figlia. I linguaggi di programmazione moderni come Java, Eifell, C ++ e Python consentono l'override del metodo.
Cos'è il sovraccarico?
Il sovraccarico dei metodi è 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 funzionalità è disponibile. È possibile eseguire l'overload di un metodo creando un altro metodo con lo stesso nome ma con una firma del metodo diversa o un tipo restituito diverso (o entrambi). Ad esempio, se hai metodo1 (tipo1 t1) e metodo1 (tipo2 t2) all'interno della stessa classe, vengono sovraccaricati. Quindi il sistema dovrà decidere quale eseguire quando viene chiamato. Questa differenziazione viene effettuata osservando il tipo di parametro / i passato / i al metodo. Se l'argomento è di tipo1, viene chiamata la prima implementazione, mentre se è di tipo2, viene chiamata la seconda implementazione.
Qual è la differenza tra Overriding e Overloading?
Sebbene l'override del metodo e il sovraccarico del metodo siano utilizzati per fornire un metodo con implementazioni diverse, esistono differenze fondamentali tra questi due concetti / tecniche. Prima di tutto, i soggetti di override del metodo rimangono sempre all'interno di classi diverse, mentre i soggetti di override del metodo rimangono nella 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, sovrascrivi un metodo nella super classe ma sovraccarichi un metodo all'interno della tua classe.
Un'altra differenza è che i metodi sostituiti hanno lo stesso nome di metodo, firma del metodo e tipo restituito, ma i metodi sovraccaricati devono differire nella firma o nel tipo restituito (il nome dovrebbe essere lo stesso). Per distinguere tra due metodi sovrascritti, il tipo esatto di oggetto che viene utilizzato per richiamare i metodi id utilizzati, mentre per distinguere tra due metodi sovraccaricati vengono utilizzati i tipi dei parametri. Un'altra differenza fondamentale è che il sovraccarico viene risolto in fase di compilazione, mentre l'override viene risolto in fase di esecuzione.