Menu
Coddy logo textTech

Метод 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() вызывается автоматически, когда вы выводите object или объединяете его со string. Это значительно упрощает отладку, поскольку вы можете быстро увидеть содержимое object, не записывая дополнительный код.

challenge icon

Задание

Легко

Давайте создадим систему учёта товаров, которая отображает содержательную информацию об объектах с помощью пользовательских реализаций toString(). Вы создадите класс Product, переопределяющий стандартный метод toString(), чтобы предоставить ясное, удобное для чтения представление каждого товара.

Вы организуете код в двух файлах:

  • Product.java: Создайте класс, представляющий объект учёта. У каждого Product есть три private поля: name (String), price (double) и quantity (int). Добавьте constructor, который initializes все three fields. Переопределите метод toString(), чтобы он возвращал отформатированную строку в этом exact формате: Product[name=X, price=Y, quantity=Z], где X, Y и Z — actual значения полей. price должен отображаться как обычное число (специальное форматирование не требуется).
  • Main.java: Оживите свой класс Product, создавая и отображая товары. Вы получите three inputs: имя товара (String), price (double) и quantity (int). Создайте Product с этими values, затем просто выведите объект товара напрямую с помощью System.out.println(). Благодаря переопределённому методу toString() это автоматически отобразит отформатированную информацию о товаре вместо загадочного вывода по умолчанию!

Вы получите three inputs: имя товара (String), price (double) и quantity (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()!)
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор Java