Methode overbelasting

Ons nieuwe en interessante onderwerp voor vandaag is method overloading . Wees voorzichtig — methode-overbelasting moet niet worden verward met methode-overheersing.

In tegenstelling tot overbelasting is overbelasting een zeer eenvoudige handeling. Het is eigenlijk geen bewerking van methoden, hoewel er soms naar wordt verwezen met de vreselijke term parametrisch polymorfisme .

Het probleem hier is dat alle methoden binnen een klasse unieke namen moeten hebben. Nou, dat is niet helemaal juist. Nou, nauwkeuriger, dat is helemaal niet nauwkeurig. De naam van de methode hoeft niet uniek te zijn. Wat uniek moet zijn, is de combinatie van de naam van de methode en de soorten parameters van de methode. Deze unie staat bekend als de methodehandtekening

Voorbeelden:

Code Beschrijving
public void print();
public void print2();
Dit is toegestaan. De twee methoden hebben unieke namen.
public void print();
public void print(int n);
En ook dit. De twee methoden hebben unieke namen (handtekeningen).
public void print(int n, int n2);
public void print(int n);
De methoden zijn nog steeds uniek
public int print(int a);
public void print(int n);
Maar dit is niet toegestaan . De methodes zijn niet uniek . Ook al retourneren ze verschillende soorten.
public int print(int a, long b);
public long print(long b, int a);
Maar je kunt dit doen . Methodeparameters zijn uniek

De handtekening bevat de methodenaam en de parametertypen . Het bevat niet het retourtype en de parameternamen van de methode . Een klasse kan niet twee methoden met dezelfde handtekening hebben — de compiler weet niet welke hij moet aanroepen.

De parameternamen doen er niet toe , omdat ze tijdens het compileren verloren gaan. Zodra een methode is gecompileerd, zijn alleen de naam en parametertypen bekend. Het retourtype gaat niet verloren, maar het resultaat van de methode hoeft nergens aan te worden toegewezen, dus het wordt ook niet opgenomen in de handtekening.

Volgens OOP- principes verbergt polymorfisme verschillende implementaties achter een enkele interface. Wanneer we System.out.println()bijvoorbeeld de methode aanroepen, worden verschillende methoden aangeroepen, afhankelijk van welke argumenten worden doorgegeven. Dit is polymorfisme in actie.

Daarom worden verschillende methoden met identieke namen in dezelfde klasse als een zwakke vorm van polymorfisme beschouwd.