Salt la conținutul principal
Modulul 2 · Lecția 2 din 24/14 în curs~12 min
Lecții din modul (2/2)

Metode și supraîncărcare

Metodele definesc comportamentul unui obiect. Ne putem gândi la ele ca funcții declarate în interiorul unei clase care operează pe câmpurile de instanță ale obiectului sau parametrii de intrare.

Definirea unei metode

O metodă în Java constă din:

  1. Modificator de acces (de exemplu, public, private).
  2. Tip de returnare (de exemplu, int, String sau void dacă nu returnează nimic).
  3. Numele metodei în camelCase.
  4. Parametri încadrați în paranteze.
  5. Corpul metodei închis în bretele.
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;
    }
}

Apelarea unei metode

Pentru a invoca o metodă pe un obiect creat, folosim notația cu puncte .:

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);
    }
}

Supraîncărcarea metodei

În Java, două sau mai multe metode din aceeași clasă pot avea același nume, atâta timp cât au o listă de parametri diferiti (în număr, ordine sau tipuri de parametri). Acest concept este cunoscut sub numele de Supraîncărcare.

Compilatorul decide ce metodă să invoce analizând argumentele transmise în timpul apelului.

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);
    }
}

Parametrul trece prin valoare

În Java, toți parametrii sunt transferați după valoare (pass-by-value). Aceasta înseamnă că atunci când treceți un argument unei metode, Java creează o copie a valorii variabilei și o transmite metodei.

  • Pentru tipurile primitive, valoarea originală din afara metodei nu se schimbă niciodată, chiar dacă este modificată în interiorul metodei.
  • Pentru obiecte/referințe, referința la obiect este copiată. Aceasta înseamnă că, deși nu putem schimba adresa de memorie către care obiectul inițial indică, putem modifica starea sa internă (de exemplu, câmpurile) și acele modificări vor fi vizibile în exterior.

Limitări de supraîncărcare: Tipul de returnare

Este important să rețineți că nu puteți supraîncărca o metodă bazată exclusiv pe tipul de returnare. De exemplu, următorul cod va provoca o eroare de compilare:

Java
class Example {
    // ERROR: The signature of the two methods is considered identical
    public int getNumber() { return 42; }
    public double getNumber() { return 42.0; }
}

Compilatorul trebuie să facă distincția între metodele bazate doar pe parametrii pentru a decide ce versiune să apeleze la compilare (supraîncărcarea este rezolvată la compilare).


Încercați-l singur

Exercițiu#java.m2.l2.e1
Încercări: 0Se încarcă…

Adăugați o metodă public int add(int a, int b) la clasa Calculator care returnează suma celor două numere. În metoda principală, apelați această metodă pe obiectul calc și atribuiți rezultatul unei variabile întregi.

Se încarcă editorul...
Afișează indiciu

Declarați metoda ca `public int add(int a, int b) { return a + b; }` și invocați-l în metoda principală ca `int result = calc.add(5, 10);`.

Soluție disponibilă după 3 încercări

Exercițiu#java.m2.l2.e2
Încercări: 0Se încarcă…

Supraîncărcați metoda add din clasa Calculator prin crearea unei alte metode care acceptă doi parametri dubli și returnează suma acestora.

Se încarcă editorul...
Afișează indiciu

Scrie `public double add(double a, double b) { return a + b; }` direct sub prima metodă de adăugare.

Soluție disponibilă după 3 încercări

Exercițiu#java.m2.l2.e3
Încercări: 0Se încarcă…

Adăugați o metodă public int multiplicare(int a, int b) la clasa Calculator care returnează produsul celor două numere. În metoda principală, apelați această metodă pe obiectul calc și atribuiți rezultatul unei variabile întregi.

Se încarcă editorul...
Afișează indiciu

Declarați metoda ca `public int multiplicare(int a, int b) { return a * b; }` și invocați-l în metoda principală ca `int result = calc.multiply(5, 10);`.

Soluție disponibilă după 3 încercări