Metoda toString()
Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 41 z 87.
Każda klasa w Javie dziedziczy po klasie Object, która udostępnia kilka przydatnych metod. Jedną z najczęściej przesłanianych jest toString(), która zwraca tekstową reprezentację obiektu.
Domyślnie toString() zwraca nazwę klasy, po której następuje kod skrótu obiektu, co nie jest zbyt pomocne:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Person p = new Person("Alice", 25);
System.out.println(p); // Person@15db9742Nadpisując toString(), możesz zapewnić znaczący wynik, który opisuje stan obiektu:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person[name=" + name + ", age=" + age + "]";
}
}
Person p = new Person("Alice", 25);
System.out.println(p); // Person[name=Alice, age=25]Metoda toString() jest wywoływana automatycznie, gdy drukujesz obiekt lub łączysz go z ciągiem znaków. Dzięki temu debugowanie jest znacznie łatwiejsze, ponieważ możesz szybko zobaczyć zawartość obiektu bez pisania dodatkowego kodu.
Wyzwanie
ŁatwyZbudujmy system inwentaryzacji produktów, który wyświetla przydatne informacje o przedmiotach za pomocą niestandardowych implementacji metody toString(). Utworzysz klasę Product, która nadpisuje domyślną metodę toString(), aby zapewnić czytelną reprezentację każdego produktu.
Rozmieścisz swój kod w dwóch plikach:
Product.java: Utwórz klasę reprezentującą przedmiot w magazynie. Każdy produkt ma trzy prywatne pola:name(String),price(double) iquantity(int). Dodaj konstruktor, który inicjalizuje wszystkie trzy pola. Nadpisz metodętoString(), aby zwracała sformatowany ciąg znaków w dokładnie takim formacie:Product[name=X, price=Y, quantity=Z], gdzie X, Y i Z to rzeczywiste wartości pól. Cena powinna być wyświetlana jako zwykła liczba (nie trzeba jej specjalnie formatować).Main.java: Ożyw swoją klasę Product, tworząc i wyświetlając produkty. Otrzymasz trzy dane wejściowe: nazwę produktu (String), cenę (double) i ilość (int). Utwórz obiekt Product z tymi wartościami, a następnie po prostu wyświetl bezpośrednio obiekt produktu za pomocąSystem.out.println(). Dzięki nadpisanej metodzietoString()automatycznie wyświetlą się sformatowane informacje o produkcie zamiast nieczytelnego domyślnego wyniku!
Otrzymasz trzy dane wejściowe: nazwę produktu (String), cenę (double) i ilość (int).
Zauważ, że bezpośrednie wyświetlenie obiektu automatycznie wywołuje metodę toString(). Dzięki temu debugowanie i rejestrowanie informacji w rzeczywistych aplikacjach jest znacznie łatwiejsze!
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 name = scanner.nextLine();
double price = scanner.nextDouble();
int quantity = scanner.nextInt();
// TODO: Utwórz obiekt Product z wartościami wejściowymi
// TODO: Wypisz bezpośrednio obiekt produktu
// (To automatycznie wywoła Twoją metodę toString()!)
}
}
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