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

challenge icon

Задание

Легко

Давайте создадим систему инвентаризации товаров, которая отображает значимую информацию об элементах с помощью пользовательских реализаций 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()!)
    }
}
quiz iconПроверьте себя

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

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