Direct naar de hoofdinhoud
Module 2 · Les 2 van 24/14 in de cursus~12 min
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:

  1. Toegangsmodificator (bijvoorbeeld public, private).
  2. Retourtype (bijvoorbeeld int, String of void als er niets wordt geretourneerd).
  3. Methodenaam in camelCase.
  4. Parameters tussen haakjes.
  5. Methodebody tussen accolades.
Java
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 .:

Java
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.

Java
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:

Java
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

Oefening#java.m2.l2.e1
Pogingen: 0Laden…

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.

Editor laden…
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

Oefening#java.m2.l2.e2
Pogingen: 0Laden…

Overbelast de add-methode in de klasse Calculator door een andere methode te maken die twee dubbele parameters accepteert en hun som retourneert.

Editor laden…
Toon hint

Schrijf `public double add(double a, double b) { return a + b; }` direct onder de eerste toevoegmethode.

Oplossing beschikbaar na 3 pogingen

Oefening#java.m2.l2.e3
Pogingen: 0Laden…

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.

Editor laden…
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