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

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

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

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

Похожие вопросы