Menu
Coddy logo textTech

Metody pobierające i ustawiające

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

Gettery i settery to metody, które zapewniają kontrolowany dostęp do pól prywatnych. Getter pobiera wartość pola, a setter ją modyfikuje.

Konwencja nazewnictwa opiera się na standardowym wzorcu: przedrostek get lub set, po którym następuje nazwa pola z wielką pierwszą literą.

public class Product {
    private String name;
    private double price;
    
    // Getter dla name
    public String getName() {
        return name;
    }
    
    // Setter dla name
    public void setName(String name) {
        this.name = name;
    }
    
    // Getter dla price
    public double getPrice() {
        return price;
    }
    
    // Setter z walidacją
    public void setPrice(double price) {
        if (price >= 0) {
            this.price = price;
        }
    }
}

Prawdziwa siła setterów tkwi w możliwości dodania logiki walidacji. W powyższym przykładzie setPrice akceptuje tylko wartości nieujemne, chroniąc obiekt przed nieprawidłowymi danymi.

W przypadku pól typu boolean metody pobierające zazwyczaj używają przedrostka is zamiast get:

private boolean active;

public boolean isActive() {
    return active;
}

Możesz też tworzyć pola tylko do odczytu, udostępniając wyłącznie getter, lub pola tylko do zapisu, udostępniając wyłącznie setter. Dzięki temu zyskujesz szczegółową kontrolę nad tym, jak zewnętrzny kod korzysta z danych Twojego obiektu.

challenge icon

Wyzwanie

Łatwy

Zbudujmy konwerter Temperature, który pokaże możliwości getterów i setterów z logiką walidacji.

Utworzysz dwa pliki, aby uporządkować swój kod:

  • Temperature.java: Zdefiniuj klasę Temperature, która przechowuje wartość temperatury w stopniach Celsjusza. Klasa powinna mieć:
    • Prywatne pole celsius (double)
    • Prywatne pole valid (boolean), które określa, czy temperatura jest fizycznie możliwa
    • Getter getCelsius(), który zwraca wartość celsius
    • Setter setCelsius(), który akceptuje tylko wartości równe lub większe od zera absolutnego (-273.15). Jeśli wartość jest prawidłowa, ustaw valid na true; w przeciwnym razie nie zmieniaj celsius i ustaw valid na false
    • Getter isValid() dla pola boolean (pamiętaj: gettery typu boolean używają prefiksu is)
    • Getter getFahrenheit(), który przelicza temperaturę na stopnie Fahrenheita i zwraca ją, używając wzoru: (celsius * 9/5) + 32
  • Main.java: Utwórz obiekt Temperature, wczytaj wartość celsius jako dane wejściowe, użyj settera, aby ją ustawić, a następnie wypisz, czy temperatura jest prawidłowa, oraz jej odpowiednik w stopniach Fahrenheita. Sformatuj wynik jako dwa wiersze:
    • Valid: true lub Valid: false
    • Fahrenheit: X.X (z dokładnością do jednego miejsca po przecinku)

Otrzymasz jedno wejście: wartość typu double reprezentującą temperaturę w stopniach Celsjusza.

Aby sformatować wynik w stopniach Fahrenheita z dokładnością do jednego miejsca po przecinku, możesz użyć String.format("%.1f", value).

Spróbuj swoich sił

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double celsiusInput = scanner.nextDouble();
        
        // TODO: Utwórz obiekt Temperature
        
        // TODO: Użyj settera, aby ustawić wartość w stopniach Celsjusza
        
        // TODO: Wypisz, czy temperatura jest prawidłowa (format: "Valid: true" lub "Valid: false")
        
        // TODO: Wypisz odpowiednią wartość w stopniach Fahrenheita (format: "Fahrenheit: X.X")
        // Wskazówka: Użyj String.format("%.1f", value), aby uzyskać jedno miejsce po przecinku
    }
}
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