Sostituzione vs sovraccarico
Il metodo Override e il metodo Overloading sono due concetti/tecniche/caratteristiche che si trovano 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 superclasse. L'overloading 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 superclasse o una classe genitore, in linguaggi di programmazione orientati agli oggetti. Una classe figlia può avere i propri metodi o, facoltativamente, avere le proprie implementazioni per metodi già definiti nella sua classe genitore (o in una delle sue classi nonno). Quindi, quando si verifica quest'ultimo, si parla di 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 padre, si dice che quel metodo è sovrascritto (sostituito) dall'implementazione della classe figlia. Quindi, se in una classe è presente un metodo sovrascritto, il sistema di 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 padre viene utilizzato per richiamare il metodo sottoposto a override, viene utilizzata l'implementazione nella classe padre. Allo stesso modo, se viene utilizzato un oggetto della classe figlia, viene utilizzata l'implementazione della classe figlia. I moderni linguaggi di programmazione come Java, Eifell, C++ e Python consentono l'override del metodo.
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 funzionalità è disponibile. Puoi sovraccaricare 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 si dispone di 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 oi parametri passati 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 l'override e il sovraccarico?
Sebbene l'override e l'override del metodo siano usati per fornire un metodo con implementazioni diverse, ci sono differenze chiave tra questi due concetti/tecniche. Prima di tutto, i soggetti del metodo overriding rimangono sempre all'interno di classi diverse, mentre i soggetti del metodo overloading 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 l'override può essere disponibile anche in un linguaggio non orientato agli oggetti. In altre parole, sovrascrivi un metodo nella superclasse ma sovraccarica un metodo all'interno della tua stessa classe.
Un' altra differenza è che i metodi sovrascritti hanno lo stesso nome del 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 sottoposti a override, viene utilizzato il tipo esatto di oggetto utilizzato per richiamare i metodi id utilizzati, mentre per distinguere tra due metodi sottoposti a override vengono utilizzati i tipi dei parametri. Un' altra differenza fondamentale è che l'override viene risolto in fase di compilazione, mentre l'override viene risolto in fase di esecuzione.