Java/Metodi/2

Wikibooks, manuali e libri di testo liberi.
< Java‎ | Metodi

Java

Linguaggio Java
Linguaggio Java

categoria · sviluppo · modifica
Come posso contribuire?

→ Vai su Wikiversity

Java:  Guida alla programmazioneJava/Introduzione - Specifica di linguaggio - Libreria standardJava/Comunicazione seriale

Tipi di datoJava/Tipi di datoEspressioniJava/OperatoriVariabiliJava/Variabili localiIstruzioniJava/IstruzioniStrutture di controlloJava/Strutture di controlloPackageJava/Package
Classi e oggettiJava/Classi e oggettiOggettiJava/OggettiMetodiJava/MetodiMetodi (cont.)Java/Metodi/2ArrayJava/Array
Modificatori di accessoJava/Modificatori di accessoEreditarietàJava/Ereditarietà
Gestione delle eccezioniJava/Gestione delle eccezioniGenericsJava/Generics
Thread e parallelismoJava/MultithreadingInterblocco ricontrollatoJava/Interblocco ricontrollato
Alcune differenze con il CJava/Concetti fondamentaliLessicoJava/LessicoGrammaticaJava/Grammatica

Overloading[modifica]

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[modifica]

Per approfondire, vedi Ereditarietà.

Metodi nativi[modifica]