Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Differenza Overloading Overriding, Appunti di Programmazione Avanzata

Differenze con esempi su Overloading e Overriding

Tipologia: Appunti

2016/2017

Caricato il 12/05/2017

luigi-piccolo
luigi-piccolo 🇮🇹

3 documenti

1 / 2

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Differenza tra override e overloading
LOverloading si definisce come la possibilità di dichiarare due funzioni distinte che abbiano lo stesso nome
purchè la lista degli argomenti sia diversa. Overloading significa che possiamo dare lo stesso nome a più di
una funzione purchè esse abbiano un diverso numero di parametri o almeno un parametro di tipo diverso.
L’Overloading risulta molto utile nel caso di funzioni che hanno fini simili ma compiono operazioni diverse
perché operano su argomenti di tipo diverso e al momento della chiamata il compilatore stabilisce quale
funzione invocare in base all’argomento.
L’Overloading è orizzontale(ricordiamo c’è anche l’Overloading dei costruttori anch’essi considerati
orizzontali).
Ecco un esempio in C++:
LOverriding è la ridefinizione in una sottoclasse di un metodo ereditato da una superclasse.
Overriding coincide con il concetto di CUT&PASTE.
Non esiste Override senza ereditarietà: infatti esistono delle regole ben precise da rispettare per la sua
implementazione:
Se si decide di riscrivere un metodo in una sottoclasse, dobbiamo utilizzare la stessa identica firma
(identificatore+lista di parametri), altrimenti parliamo di Overloading.
Il tipo di ritorno del metodo deve coincidere con quello che si sta ridefinendo oppure con una sua
sottoclasse.
Il metodo ridefinito nella sottoclasse non deve essere meno accessibile del metodo originale della
superclasse. (se è stato ridefinito ad esempio public anche quello della sottoclasse deve essere
public)
L’Overriding è verticale, sovrascrivo.
In codice come esempio di Overriding abbiamo:
Ipotizziamo d'avere due classi, Alfa e Beta, con Beta che estende Alfa.
Alfa contiene i metodi:
pf2

Anteprima parziale del testo

Scarica Differenza Overloading Overriding e più Appunti in PDF di Programmazione Avanzata solo su Docsity!

Differenza tra override e overloading

L’ Overloading si definisce come la possibilità di dichiarare due funzioni distinte che abbiano lo stesso nome purchè la lista degli argomenti sia diversa. Overloading significa che possiamo dare lo stesso nome a più di una funzione purchè esse abbiano un diverso numero di parametri o almeno un parametro di tipo diverso. L’Overloading risulta molto utile nel caso di funzioni che hanno fini simili ma compiono operazioni diverse perché operano su argomenti di tipo diverso e al momento della chiamata il compilatore stabilisce quale funzione invocare in base all’argomento.

L’Overloading è orizzontale(ricordiamo c’è anche l’Overloading dei costruttori anch’essi considerati orizzontali).

Ecco un esempio in C++:

L’ Overriding è la ridefinizione in una sottoclasse di un metodo ereditato da una superclasse.

Overriding coincide con il concetto di CUT&PASTE.

Non esiste Override senza ereditarietà: infatti esistono delle regole ben precise da rispettare per la sua implementazione:

  • Se si decide di riscrivere un metodo in una sottoclasse, dobbiamo utilizzare la stessa identica firma (identificatore+lista di parametri), altrimenti parliamo di Overloading.
  • Il tipo di ritorno del metodo deve coincidere con quello che si sta ridefinendo oppure con una sua sottoclasse.
  • Il metodo ridefinito nella sottoclasse non deve essere meno accessibile del metodo originale della superclasse. (se è stato ridefinito ad esempio public anche quello della sottoclasse deve essere public)

L’Overriding è verticale, sovrascrivo.

In codice come esempio di Overriding abbiamo:

Ipotizziamo d'avere due classi, Alfa e Beta, con Beta che estende Alfa.

Alfa contiene i metodi:

  • leggi();
  • (^) scrivi();

Beta contiene il metodo:

  • leggi(); //classe madre

class Alfa

String leggi()

return "Alfa ha letto";

void scrivi()

System.out.println("Alfa ha scritto");

//classe figlia che eredita

class Beta extends Alfa

String leggi()

return "Beta ha letto";

dichiariamo un oggetto:

Alfa dato = new Beta();

dato.leggi();

Si eseguirà il metodo di Beta, poiché l'oggetto è un'istanza di Beta, e questo dato è letto in fase

di runtime per permettere all'interprete java di sapere quale metodo con etichetta leggi() far eseguire.