Menu
Coddy logo textTech

Podstawy przeciążania metod

Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 28 z 87.

Polimorfizm oznacza „wiele form”. W Javie pozwala obiektom zachowywać się różnie w zależności od kontekstu. Jedną z form polimorfizmu jest przeciążanie metod, nazywane także polimorfizmem czasu kompilacji, ponieważ Java określa, którą metodę wywołać podczas kompilacji.

Przeciążanie metod pozwala definiować wiele metod o tej samej nazwie, ale różnych parametrach. Kompilator rozróżnia je na podstawie liczby, typu lub kolejności parametrów:

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
    
    public int add(int a, int b, int c) {
        return a + b + c;
    }
    
    public double add(double a, double b) {
        return a + b;
    }
}

Gdy wywołujesz add(5, 3), Java używa pierwszej metody. Wywołanie add(5, 3, 2) uruchamia drugą, a add(5.0, 3.0) wywołuje trzecią. Kompilator wybiera właściwą wersję na podstawie podanych argumentów.

Pamiętaj, że zmiana wyłącznie typu zwracanego nie jest prawidłowym przeciążaniem. Lista parametrów musi się różnić:

// To NIE jest poprawne przeciążenie — kod się nie skompiluje
public int getValue() { return 1; }
public double getValue() { return 1.0; }  // Błąd!

Właściwie widziałeś już przeciążanie metod w przypadku przeciążania konstruktorów. Przeciążanie metod podlega tym samym zasadom i zapewnia elastyczność, pozwalając jednej nazwie metody obsługiwać różne sytuacje wejściowe.

challenge icon

Wyzwanie

Łatwy

Zbudujmy formater wiadomości, który demonstruje przeciążanie metod, oferując wiele sposobów formatowania wiadomości. Utworzysz klasę narzędziową z kilkoma przeciążonymi metodami format, które obsługują różne scenariusze wejściowe.

Podzielisz kod na dwa pliki:

  • MessageFormatter.java: Utwórz klasę, która umożliwia elastyczne formatowanie wiadomości za pomocą przeciążonych metod. Twój formater powinien zawierać:
    • Metodę format(String message), która zwraca wiadomość ujętą w nawiasy kwadratowe: [message]
    • Metodę format(String message, int repeatCount), która zwraca wiadomość powtórzoną określoną liczbę razy i rozdzieloną spacjami
    • Metodę format(String message, String prefix), która zwraca wiadomość z dołączonym prefiksem: prefix: message
    • Metodę format(String message, String prefix, String suffix), która zwraca: prefix: message (suffix)
    Kompilator wybierze właściwą metodę na podstawie przekazanych argumentów — to właśnie polimorfizm czasu kompilacji w działaniu!
  • Main.java: Zademonstruj działanie wszystkich czterech przeciążonych metod. Otrzymasz cztery dane wejściowe: wiadomość (String), liczbę powtórzeń (int), prefiks (String) i sufiks (String). Utwórz obiekt MessageFormatter i wywołaj każdą wersję metody format, wypisując każdy wynik w osobnym wierszu:
    • Po pierwsze, sformatuj samą wiadomość
    • Po drugie, sformatuj wiadomość i liczbę powtórzeń
    • Po trzecie, sformatuj wiadomość i prefiks
    • Po czwarte, sformatuj wiadomość, prefiks i sufiks

Otrzymasz cztery dane wejściowe: tekst wiadomości, liczbę jej powtórzeń, ciąg znaków prefiksu i ciąg znaków sufiksu.

Na przykład, jeśli wiadomość to "Hello", liczba powtórzeń wynosi 3, prefiks to "INFO", a sufiks to "done", wynik powinien pokazywać cztery różne sformatowane wersje tej samej wiadomości, z których każda wykorzystuje inną przeciążoną metodę!

Spróbuj swoich sił

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Wczytaj dane wejściowe
        String message = scanner.nextLine();
        int repeatCount = Integer.parseInt(scanner.nextLine());
        String prefix = scanner.nextLine();
        String suffix = scanner.nextLine();
        
        // TODO: Utwórz obiekt MessageFormatter
        
        // TODO: Wywołaj format, przekazując tylko message, i wypisz wynik
        
        // TODO: Wywołaj format, przekazując message i repeatCount, i wypisz wynik
        
        // TODO: Wywołaj format, przekazując message i prefix, i wypisz wynik
        
        // TODO: Wywołaj format, przekazując message, prefix i suffix, i wypisz wynik
        
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Java online