Getter- und Setter-Methoden
Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy — Lektion 11 von 87.
Getter und Setter sind Methoden, die einen kontrollierten Zugriff auf private Felder ermöglichen. Ein Getter ruft den Wert eines Feldes ab, während ein Setter diesen ändert.
Die Namenskonvention folgt einem Standardmuster: Präfix get oder set, gefolgt vom Feldnamen, dessen erster Buchstabe großgeschrieben wird.
public class Product {
private String name;
private double price;
// Getter für name
public String getName() {
return name;
}
// Setter für name
public void setName(String name) {
this.name = name;
}
// Getter für price
public double getPrice() {
return price;
}
// Setter mit Validierung
public void setPrice(double price) {
if (price >= 0) {
this.price = price;
}
}
}Die wahre Stärke von Settern liegt in der Möglichkeit, Validierungslogik hinzuzufügen. Im obigen Beispiel akzeptiert setPrice nur nicht-negative Werte und schützt das Objekt so vor ungültigen Daten.
Für boolean Felder verwenden Getter normalerweise das Präfix is anstelle von get:
private boolean active;
public boolean isActive() {
return active;
}Sie können auch schreibgeschützte Felder erstellen, indem Sie nur einen Getter bereitstellen, oder nur beschreibbare Felder, indem Sie nur einen Setter bereitstellen. Dies gibt Ihnen eine feingranulare Kontrolle darüber, wie externer Code mit den Daten Ihres Objekts interagiert.
Aufgabe
EinfachLassen Sie uns einen Temperature-Konverter bauen, der die Leistungsfähigkeit von Gettern und Settern mit Validierungslogik demonstriert.
Sie werden zwei Dateien erstellen, um Ihren Code zu organisieren:
Temperature.java: Definieren Sie eine Temperature-Klasse, die einen Temperaturwert in Celsius speichert. Die Klasse sollte Folgendes enthalten:- Ein privates
celsius-Feld (double) - Ein privates
valid-Feld (boolean), das verfolgt, ob die Temperatur physikalisch möglich ist - Einen Getter
getCelsius(), der den celsius-Wert zurückgibt - Einen Setter
setCelsius(), der nur Werte bei oder über dem absoluten Nullpunkt (-273.15) akzeptiert. Wenn der Wert gültig ist, setzen Sievalidauf true; andernfalls ändern Sie celsius nicht und setzen Sievalidauf false - Einen Getter
isValid()für das boolean-Feld (denken Sie daran: boolean-Getter verwenden das Präfixis) - Einen Getter
getFahrenheit(), der die Temperatur in Fahrenheit umrechnet und zurückgibt, unter Verwendung der Formel:(celsius * 9/5) + 32
- Ein privates
Main.java: Erstellen Sie ein Temperature-Objekt, lesen Sie einen celsius-Wert als Eingabe ein, verwenden Sie den Setter, um ihn zu setzen, und geben Sie dann aus, ob die Temperatur gültig ist und was ihr Fahrenheit-Äquivalent ist. Formatieren Sie Ihre Ausgabe in zwei Zeilen:Valid: trueoderValid: falseFahrenheit: X.X(mit einer Dezimalstelle)
Sie erhalten eine Eingabe: einen double-Wert, der eine Temperatur in Celsius darstellt.
Um die Fahrenheit-Ausgabe auf eine Dezimalstelle zu formatieren, können Sie String.format("%.1f", value) verwenden.
Spickzettel
Getter und Setter sind Methoden, die einen kontrollierten Zugriff auf private Felder ermöglichen. Ein Getter ruft den Wert eines Feldes ab, während ein Setter diesen ändert.
Die Namenskonvention folgt einem Standardmuster: das Präfix get oder set gefolgt vom Feldnamen, dessen erster Buchstabe großgeschrieben wird.
public class Product {
private String name;
private double price;
// Getter für name
public String getName() {
return name;
}
// Setter für name
public void setName(String name) {
this.name = name;
}
// Getter für price
public double getPrice() {
return price;
}
// Setter mit Validierung
public void setPrice(double price) {
if (price >= 0) {
this.price = price;
}
}
}Setter können Validierungslogik enthalten, um Objekte vor ungültigen Daten zu schützen. Im obigen Beispiel akzeptiert setPrice nur nicht-negative Werte.
Für boolean-Felder verwenden Getter das Präfix is anstelle von get:
private boolean active;
public boolean isActive() {
return active;
}Sie können schreibgeschützte Felder erstellen, indem Sie nur einen Getter bereitstellen, oder nur beschreibbare Felder, indem Sie nur einen Setter bereitstellen.
Probier es selbst
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double celsiusInput = scanner.nextDouble();
// TODO: Erstelle ein Temperature-Objekt
// TODO: Verwende den Setter, um den celsius-Wert zu setzen
// TODO: Gib aus, ob die Temperatur gültig ist (Format: "Valid: true" oder "Valid: false")
// TODO: Gib den entsprechenden Fahrenheit-Wert aus (Format: "Fahrenheit: X.X")
// Hinweis: Verwende String.format("%.1f", value) für eine Dezimalstelle
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenFelder (Attribute)Konstruktor-MethodeKonstruktor-ÜberladungRückblick – Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (extends)Das super-SchlüsselwortMethoden überschreiben (@Override)Konstruktor-VerkettungDie Object-KlasseEinfache & mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-InterfaceZusammenfassung – Benutzerdefiniertes Sortieren2Zugriffsmodifikatoren & Kapselung
Überblick über ZugriffsebenenGetter- und Setter-MethodenInformation HidingDas final-SchlüsselwortRückblick – Bankkonto-Manager5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenZusammenfassung – Formenrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, geschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Sealed Classes (Java 17+)11Design Patterns Teil 1
Einführung in Design PatternsSingleton-PatternFactory-PatternBuilder-PatternObserver-PatternStrategy-Pattern14Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung3Klasseneigenschaften & Statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Zusammenfassung – Zähler & Utility6Interfaces & Abstrakte Klassen
Einführung in InterfacesInterfaces implementierenImplementierung mehrerer InterfacesDefault- & statische Methoden in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesZusammenfassung - Zahlungssystem