Modulelessen (2/2)
Methoden en overbelasting
Methoden definiëren het gedrag van een object. We kunnen ze beschouwen als functies die binnen een klasse zijn gedeclareerd en die werken op de instantievelden van het object of op binnenkomende parameters.
Een methode definiëren
Een methode in Java bestaat uit:
- Toegangsmodificator (bijvoorbeeld
public,private). - Retourtype (bijvoorbeeld
int,Stringofvoidals er niets wordt geretourneerd). - Methodenaam in
camelCase. - Parameters tussen haakjes.
- Methodebody tussen accolades.
class Person {
String name;
public Person(String name) {
this.name = name;
}
// Method with return type String
public String greet() {
return "Ciao, mi chiamo " + name;
}
}Een methode aanroepen
Om een methode op een gemaakt object aan te roepen, gebruiken we puntnotatie .:
public class Main {
public static void main(String[] args) {
Person p = new Person("Marco");
String message = p.greet(); // Calling the method
System.out.println(message);
}
}Methode Overbelasting
In Java kunnen twee of meer methoden binnen dezelfde klasse dezelfde naam hebben, zolang ze maar een verschillende parameterlijst hebben (in aantal, volgorde of typen parameters). Dit concept staat bekend als Overbelasting.
De compiler beslist welke methode moet worden aangeroepen door de argumenten te analyseren die tijdens de aanroep worden doorgegeven.
class Printer {
// Method to print an integer
public void printValue(int number) {
System.out.println("Intero: " + number);
}
// Overloaded method to print a string
public void printValue(String text) {
System.out.println("Testo: " + text);
}
}Parameter doorgegeven door waarde
In Java worden alle parameters per waarde doorgegeven (pass-by-value). Dit betekent dat wanneer u een argument aan een methode doorgeeft, Java een kopie van de waarde van de variabele maakt en deze doorgeeft aan de methode.
- Voor primitieve typen verandert de oorspronkelijke waarde buiten de methode nooit, zelfs niet als deze binnen de methode wordt gewijzigd.
- Bij objecten/referenties wordt de verwijzing naar het object gekopieerd. Dit betekent dat hoewel we het geheugenadres waarnaar het oorspronkelijke object verwijst niet kunnen veranderen, we wel de interne status ervan (bijvoorbeeld de velden) kunnen wijzigen en dat die veranderingen buiten zichtbaar zullen zijn.
Overbelastingsbeperkingen: het retourtype
Het is belangrijk op te merken dat u een methode niet kunt overbelasten, uitsluitend op basis van het retourneringstype. De volgende code veroorzaakt bijvoorbeeld een compilatiefout:
class Example {
// ERROR: The signature of the two methods is considered identical
public int getNumber() { return 42; }
public double getNumber() { return 42.0; }
}De compiler moet onderscheid maken tussen methoden die alleen op de parameters zijn gebaseerd om te beslissen welke versie moet worden aangeroepen tijdens het compileren (overbelasting wordt opgelost tijdens het compileren).
Probeer het zelf
Voeg een openbare methode int add(int a, int b) toe aan de klasse Calculator die de som van de twee getallen retourneert. Roep in de hoofdmethode deze methode aan op het calc-object en wijs het resultaat toe aan een geheel getalvariabele.
Toon hint
Declareer de methode als `public int add(int a, int b) { return a + b; }` en roep het in de hoofdmethode aan als `int result = calc.add(5, 10);`.
Oplossing beschikbaar na 3 pogingen
Overbelast de add-methode in de klasse Calculator door een andere methode te maken die twee dubbele parameters accepteert en hun som retourneert.
Toon hint
Schrijf `public double add(double a, double b) { return a + b; }` direct onder de eerste toevoegmethode.
Oplossing beschikbaar na 3 pogingen
Voeg een publieke int multiply(int a, int b) methode toe aan de klasse Calculator die het product van de twee getallen retourneert. Roep in de hoofdmethode deze methode aan op het calc-object en wijs het resultaat toe aan een geheel getalvariabele.
Toon hint
Declareer de methode als `public int multiply(int a, int b) { return a * b; }` en roep het in de hoofdmethode aan als `int result = calc.multiply(5, 10);`.
Oplossing beschikbaar na 3 pogingen