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.
Wyzwanie
ŁatwyZbudujmy 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, ustawvalidna true; w przeciwnym razie nie zmieniaj celsius i ustawvalidna false - Getter
isValid()dla pola boolean (pamiętaj: gettery typu boolean używają prefiksuis) - Getter
getFahrenheit(), który przelicza temperaturę na stopnie Fahrenheita i zwraca ją, używając wzoru:(celsius * 9/5) + 32
- Prywatne pole
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: truelubValid: falseFahrenheit: 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
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe thisMetodyPola (atrybuty)Metoda konstruktoraPrzeciążanie konstruktoraPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawy dziedziczenia (extends)Słowo kluczowe superPrzesłanianie metod (@Override)Łańcuch wywołań konstruktorówKlasa ObjectDziedziczenie jedno- i wielopoziomoweDlaczego Java nie obsługuje wielodziedziczenia klasPodsumowanie – hierarchia pracowników7Metody specjalne i klasa Object
Metoda toString()equals() i hashCode()Metoda clone()compareTo() i ComparableInterfejs ComparatorPodsumowanie — własne sortowanie10Obsługa wyjątków w programowaniu obiektowym
Hierarchia klas wyjątkówWłasne wyjątkiBłędy sprawdzane a niesprawdzaneWzorzec try-with-resourcesPodsumowanie – zweryfikowany użytkownik2Modyfikatory dostępu i enkapsulacja
Przegląd poziomów dostępuMetody pobierające i ustawiająceUkrywanie informacjiSłowo kluczowe finalPodsumowanie — menedżer kont bankowych5Polimorfizm
Podstawy przeciążania metodPrzesłanianie metod (w czasie wykonywania)Rzutowanie w górę i w dółOperator instanceofKlasy i metody abstrakcyjnePowtórka — kalkulator figur8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieAgregacja a kompozycjaKlasy wewnętrzne, zagnieżdżone i anonimoweEnumy i metody enumówRekordy (Java 16+)Klasy zapieczętowane (Java 17+)11Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec BuilderWzorzec ObserverWzorzec Strategy3Właściwości klas i składowe statyczne
Zmienne instancji a zmienne statyczneMetody statyczneBloki statyczneStałe (static final)Powtórka – Counter i Utility6Interfejsy i klasy abstrakcyjne
Wprowadzenie do interfejsówImplementowanie interfejsówImplementacja wielu interfejsówMetody domyślne i statyczne w interfejsieKlasy abstrakcyjne a interfejsyInterfejsy funkcyjnePodsumowanie — system płatnościPoćwicz samodzielnie: Kompilator Java online