Zabieramy się znowu za język Java i za wątek przesłaniania, który opisałem wczoraj jeśli ominęliście. Kontynuacja poprzedniego wątku zaprezentuje jak można wykorzystać przesłanianie w stosunku do metody o nazwie "toString" w języku Java. Co to konkretnie jest?
Tweet |
PRZESŁANIANIE I WYJAŚNIENIE METODY "TOSTRING" W JĘZYKU JAVA
Metoda "toString" jest jedną z kilku metod należących do "matki wszystkich obiektów" jaką jest klasa "Object". Zwraca ona wartość typu "String" i domyślnie tworzy tak zwany "kod mieszający" (więcej o tym terminie jest napisane w odrębnym artykule). Na tym etapie wystarczy żebyście wiedzieli, że taki kod mieszający to jest "zlepek" nazwy klasy, znaku "małpki" (@ - ang. at) oraz unikalnego kodu liczbowego nazywanego "hashCode". Metoda jest automatycznie wywoływana, gdy umieścimy nazwę instancji klasy w metodzie "System.out.println" (lub "System.out.print"). Tak w telegraficznym skrócie można opisać samą metodę "toString".
No to następne pytanie: czemu potrzebne jest przesłanianie metody? Czemu, gdy jest kiedykolwiek mowa o tej metodzie, to od razu nasuwa się innym na myśl jej przesłanianie? Ponieważ jest to funkcja już istniejąca! W związku z tym, nie definiujemy jej od nowa, tylko ją "ściągamy" z klasy bazowej jaką jest klasa "Object" (nawet gdy nie korzystamy ze słowa "extends") i przystosowujemy jej działanie do naszych potrzeb.
Drążmy temat dalej: dlaczego przesłanianie metody "toString" w języku Java może nam pomóc i w jakich okolicznościach? Co powinniśmy tam dorzucić i w jaki sposób? Otóż składnia metody "pierwotnej" "toString" wygląda następująco:
public String toString() {
return [kod mieszający];
}
Uprościłem zawartość, aby nie rozgrzebywać tematu, którego szczegóły są opisane w innym materiale. Widzimy zatem, że mamy tylko jedną linijkę ze słowem "return". Wniosek z tego jest taki, że możemy dzięki temu zamienić sobie nic niemówiące hasła na odpowiednio sformatowany tekst, który będzie dostarczał jakichś cennych informacji bez wykorzystywania funkcji dodatkowych.
PRZYKŁAD KODU ŹRÓDŁOWEGO
Pozwólcie, ze po raz enty zapoznam Was z przykładowym kodem źródłowym. W przykładzie tym, mamy klasę reprezentującą punkt w dwuwymiarowym układzie współrzędnych. Po utworzeniu instancji i przypisaniu dwóch wartości całkowitych pełniących rolę danych składowych, przesłaniamy metodę "toString", a następnie korzystając z metody "System.out.println" wypisujemy współrzędne bez wywoływania jakiejkolwiek metody, to jest bardzo ważne! Przesłanianie metody "toString" w języku Java tym się charakteryzuje, że ona sama odpowiada za format komunikatu:
KLASA "MAIN"
public class Main {
public static void main(String[] args) {
Point pa = new Point(0, 2);
Point pb = new Point(8, 7);
System.out.println(pa);
System.out.println(pb);
}
}
KLASA "POINT"
public class Point {
private int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "(" + x + ", " + y + ")";
}
}
Wypisując obiekt w konsoli, standardowo ujrzelibyśmy dziwnie wyglądający kod mieszający. Dzięki przesłonięciu jednej z metod istniejących w klasie bazowej "Object", sformatowaliśmy sobie tekst na postać punktu w układzie współrzędnych bez definiowania ani wywoływania jakiejkolwiek metody na uboczu. Na tym właśnie polega przesłanianie metody "toString" w języku Java.
Dziękuję za przeczytanie. Od tej pory nie powinno być problemów zarówno w rozumieniu, jak i wykorzystywaniu. Niech to Wam dobrze służy :D!