Метод 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() — именно это делает отладку и логирование в реальных приложениях намного проще!
Шпаргалка
Каждый класс в Java наследуется от класса Object. Метод toString() возвращает строковое представление объекта.
По умолчанию toString() возвращает имя класса, за которым следует хэш-код объекта:
Person p = new Person("Alice", 25);
System.out.println(p); // Person@15db9742Переопределите toString(), чтобы обеспечить осмысленный вывод:
@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() вызывается автоматически при выводе объекта на печать или его конкатенации со строкой.
Попробуйте сами
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Модификаторы доступа и инкапсуляция
Обзор уровней доступаМетоды геттеры и сеттерыСокрытие данныхКлючевое слово finalИтоги — Менеджер банковского счета5Полиморфизм
Основы перегрузки методовПереопределение методов (Run-Time)Upcasting и DowncastingОператор instanceofАбстрактные классы и методыИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияАгрегация против композицииВнутренние, вложенные и анонимные классыEnums и методы перечисленийRecords (Java 16+)Sealed-классы (Java 17+)11Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн BuilderПаттерн ObserverПаттерн Strategy3Свойства класса и статические члены
Переменные экземпляра и статические переменныеСтатические методыСтатические блокиКонстанты (static final)Итоги: Счетчик и утилиты6Интерфейсы и абстрактные классы
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовDefault и Static методы в интерфейсахАбстрактные классы vs ИнтерфейсыФункциональные интерфейсыИтоги — Платежная система9Обобщения
Введение в обобщенияОбобщенные классыОбобщенные методыОграниченные параметры типаСимволы подстановки (Wildcards: ?, extends, super)Итоги — Обобщенный контейнер12Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»Паттерн «Итератор»