@yuuurryyy

Хочу разобраться в коде java, не понимаю как работают несколько строк. Объясните как работают эти строки?

Доброго времени суток товарищи. Объясните чайнику как работают несколько строк в программе. Как работает в целом сама программа я понимаю.
Вот сама программа:

public class Solution {
    public static volatile boolean isStopped = false;

    public static void main(String[] args) throws InterruptedException {
        Runner ivanov = new Runner("Ivanov", 4);
        Runner petrov = new Runner("Petrov", 2);
        //на старт!
        //внимание!
        //марш!
        ivanov.start();
        petrov.start();
        Thread.sleep(2000);
        isStopped = true;
        Thread.sleep(1000);
    }

    public static class Stopwatch extends Thread {
        private Runner owner;
        private int stepNumber;

        public Stopwatch(Runner runner) {
            this.owner = runner;
        }

        public void run() {
            try {
                while (!isStopped) {
                    doStep();
                }
            } catch (InterruptedException e) {
            }
        }

        private void doStep() throws InterruptedException {
            stepNumber++;

           Thread.sleep(1000/owner.getSpeed());



            //add your code here - добавь код тут
            System.out.println(owner.getName() + " делает шаг №" + stepNumber + "!");
        }
    }

    public static class Runner {
        Stopwatch stopwatch;
        private String name;
        private int speed;

        public Runner(String name, int speed) {
            this.name = name;
            this.speed = speed;
            this.stopwatch = new Stopwatch(this);
        }

        public String getName() {
            return name;
        }

        public int getSpeed() {
            return speed;
        }

        public void start() {
            stopwatch.start();
        }
    }
}


Мне не понятно что происходить в кострукторе класса Runner. А именно последняя строка создание объекта. Какой объект создается? Здесь пресуствует полиморфизм или нет? Объясните эту строку что она делает и зачем?


public Runner(String name, int speed) {
            this.name = name;
            this.speed = speed;
            this.stopwatch = new Stopwatch(this);
        }


Что делает конструктор класса Stopwatch? Какой объект он создает и зачем?
public Stopwatch(Runner runner) {
            this.owner = runner;
        }


Я понимаю что эти два конструкторы связаны, что конструктор Runner вызывает конструктор Stopwatc. Но какой объект здесь создается не понимаю и зачем так делается не понимаю.
  • Вопрос задан
  • 174 просмотра
Пригласить эксперта
Ответы на вопрос 1
xez
@xez Куратор тега Java
TL Junior Roo
1. Конструктор Stopwatch на вход принимает объект класса Runner. Он ему нужен для того чтобы знать его имя и скорость.
2. Конструктор Runner принимет на вход имя и скорость. Экземпляр класса Stopwatch создается прямо в конструкторе и в него передается ссылка на этого же Runner-а. Немного tricky да.

Представьте, что у вас есть два бегуна.
Вы берете двое часов и подписываете их. Одни часы для Иванова, другие для Петрова.
Часы вы кладете каждому бегуну в карман. У вас получается такой составной объект: бегун с часами в кармне, которые знают, как зовут этого бегуна.
Когда вы командуете Start, каждый бегун нажимает на кнопку start на часах:
public void start() {
            stopwatch.start();
        }

Часы при этом такие крутые, что еще и знают с какой скоростью бежит бегун. Это им позволяет куда-то выводить сообщение о том, что каждый из них сделал очередной шаг.
Вот примерно такую сложную ситуацию описывает этот код.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект