Java/Metodi/2: differenze tra le versioni

< Java‎ | Metodi
Contenuto cancellato Contenuto aggiunto
incollo da Java/Metodi. Vedi talk per la crono
(Nessuna differenza)

Versione delle 11:44, 11 mag 2011

Java

Linguaggio Java
Linguaggio Java

categoria · sviluppo · modifica
Come posso contribuire?

→ Vai su Wikiversity

Java:  Guida alla programmazione - Specifica di linguaggioJava/Tipi di dato - Libreria standardJava/Comunicazione seriale


Introduzione:     IntroduzioneJava/Introduzione   •   Procurarsi il JDKJava/Procurarsi il JDK
Il linguaggio:     Dal sorgente all'esecuzioneJava/Dal sorgente all'esecuzione   •   Il linguaggioJava/Il linguaggio   •   Programmazione ad oggettiJava/Programmazione ad oggetti
Aspetti avanzati:     Thread e parallelismoJava/Multithreading   •   Interblocco ricontrollatoJava/Interblocco ricontrollato   •   JavadocJava/Javadoc
Appendici:     EserciziJava/Esercizi   •   La macchina virtualeJava/La macchina virtuale   •   Errori e mitiJava/Errori e mitiTrucchi e consigliJava/Trucchi e consigli


Overloading

Ogni metodo di un determinato tipo ha un nome associato. In realtà, il nome da solo non è sufficiente ad identificare il metodo. Gli elementi che identificano il metodo sono collettivamente chiamati signature e sono determinati da

  • nome del metodo
  • numero e dal tipo degli argomenti

Il nome degli argomenti non conta.

Metodi con lo stesso nome, ma diverse liste di argomenti, sono a tutti gli effetti diversi agli occhi del compilatore e del programma Java. Il motivo principale è che ciò permette di raggruppare insieme dei metodi concettualmente simili o che compiono le stesse operazioni:

class Persona {
    
    public void guida(Bicicletta b) { ... }
    public void guida(Automobile a) { ... }
    public void guida(Aeroplano a) { ... }
    
}

Se un client invoca

Persona p = ...;
p.guida(mezzo);

il compilatore sceglie la versione del metodo guida più adatta a seconda del tipo della variabile mezzo.
Attenzione: la scelta viene determinata solo sulla base del tipo a tempo di compilazione. Quindi, se Bicicletta, Automobile e Aeroplano sono sottotipi di un tipo comune MezzoDiTrasporto, e mezzo è una variabile di tipo MezzoDiTrasporto, allora il compilatore protesta richiedendo che venga specificata quale delle tre versioni va invocata.

L'overloading è supportato anche per i costruttori. Questo permette di dare al client la possibilità di costruire un oggetto in modi diverse a seconda della specifica lista di parametri utilizzata.

Overriding

  Per approfondire, vedi Ereditarietà.

Metodi nativi