מתודת toString()
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 41 מתוך 87.
כל מחלקה ב-Java יורשת מהמחלקה Object, שמספקת כמה מתודות שימושיות. אחת המתודות הנפוצות ביותר לדריסה היא toString(), שמחזירה ייצוג מחרוזת של אובייקט.
כברירת מחדל, toString() מחזירה את שם המחלקה ואחריו קוד הגיבוב של האובייקט, דבר שאינו מועיל במיוחד:
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@15db9742באמצעות דריסה של toString(), אפשר לספק פלט בעל משמעות שמתאר את מצב האובייקט:
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]המתודה toString() נקראת אוטומטית כשמדפיסים אובייקט או משרשרים אותו למחרוזת. כך קל הרבה יותר לנפות שגיאות, כי אפשר לראות במהירות את התוכן של אובייקט בלי לכתוב קוד נוסף.
אתגר
קלבואו נבנה מערכת לניהול מלאי מוצרים שמציגה מידע משמעותי על פריטים באמצעות מימושים מותאמים אישית של toString(). תיצרו מחלקה בשם Product שתדרוס את המתודה toString() כברירת מחדל, כדי לספק ייצוג ברור וקריא של כל מוצר.
תארגנו את הקוד בשני קבצים:
Product.java: צרו מחלקה שמייצגת פריט במלאי. לכל Product יש שלושה שדות פרטיים:name(String),price(double) ו-quantity(int). כללו בנאי שמאתחל את כל שלושת השדות. דרסו את המתודהtoString()כדי שתחזיר מחרוזת מעוצבת בפורמט המדויק הזה:Product[name=X, price=Y, quantity=Z], כאשר X, Y ו-Z הם הערכים בפועל של השדות. המחיר יוצג כמספר פשוט (אין צורך בעיצוב מיוחד).Main.java: הפיחו חיים במחלקה Product שלכם באמצעות יצירה והצגה של מוצרים. תקבלו שלוש קלטים: שם מוצר (String), מחיר (double) וכמות (int). צרו Product עם הערכים האלה, ואז פשוט הדפיסו את אובייקט המוצר ישירות באמצעותSystem.out.println(). הודות למתודהtoString()שדרסתם, המידע על המוצר יוצג אוטומטית בפורמט הרצוי במקום הפלט הסתום שמתקבל כברירת מחדל!
תקבלו שלושה קלטים: שם המוצר (String), המחיר (double) והכמות (int).
שימו לב שהדפסה ישירה של האובייקט מפעילה אוטומטית את המתודה toString() שלכם. כך קל הרבה יותר לנפות שגיאות ולתעד מידע ביומן ביישומים אמיתיים!
נסו בעצמכם
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// קרא את הקלטים
String name = scanner.nextLine();
double price = scanner.nextDouble();
int quantity = scanner.nextInt();
// TODO: צור אובייקט Product עם ערכי הקלט
// TODO: הדפס את אובייקט Product ישירות
// (פעולה זו תקרא אוטומטית למתודה toString() שלך!)
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא לתכנות מונחה עצמיםמחלקות לעומת אובייקטיםמילת המפתח thisמתודותשדות (מאפיינים)מתודת הבנאיהעמסת בנאיםחזרה – מחשבון פשוט4ירושה
ירושה בסיסית (extends)מילת המפתח superדריסת מתודות (@Override)שרשור בנאיםהמחלקה Objectירושה יחידה ורב־רמתיתלמה אין ירושה מרובה של מחלקותסיכום – היררכיית עובדים7מתודות מיוחדות ומחלקת Object
מתודת toString()equals() ו-hashCode()מתודת clone()compareTo() ו-Comparableהממשק Comparatorסיכום – מיון מותאם אישית2מצייני גישה ואנקפסולציה
סקירה של רמות הגישהמתודות Getter ו-Setterהסתרת מידעמילת המפתח finalסיכום – מנהל חשבון בנק5פולימורפיזם
יסודות העמסת מתודותדריסת מתודות (בזמן ריצה)המרה כלפי מעלה וכלפי מטההאופרטור instanceofמחלקות ומתודות מופשטותסיכום – מחשבון צורות8מושגי OOP מתקדמים
הרכבה מול ירושהאגרגציה מול הרכבהמחלקות פנימיות, מקוננות ואנונימיותEnums ומתודות של EnumRecords (Java 16+)מחלקות חתומות (Java 17+)3מאפייני מחלקה וחברים סטטיים
משתני מופע לעומת משתנים סטטייםמתודות סטטיותבלוקים סטטייםקבועים (static final)סיכום — מונה ומחלקת עזר6ממשקים ומחלקות מופשטות
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםמתודות ברירת מחדל וסטטיות בממשקמחלקות מופשטות לעומת ממשקיםממשקים פונקציונלייםסיכום – מערכת תשלומיםתרגלו בעצמכם: קומפיילר Java אונליין