В этом видео я покажу вам, как бороться с дублированием кода в конструкторах. У нас есть конструктор студентов, конструктор преподавателей и конструктор личностей. Если мы посмотрим на конструкторы преподавателей и студентов, мы увидим, что они похожи и выполняют одинаковую работу: принимают в качестве аргумента имя студента или преподавателя и сохраняют его в поле name. Нам бы хотелось избежать этого дублирования. Проще всего — вынести этот общий код в отдельный конструктор. Лучше всего для нас подойдет конструктор Person. Давайте просто перенесем туда строчку, которая сохраняет имя студента или преподавателя в конструктор Person, вот таким образом. Далее, если мы сейчас попытаемся создать нового студента и передадим туда имя, мы не получим желаемого результата, так как мы забрали этот код из конструктора для студентов и переместили его в конструктор для личностей. Поэтому нам необходимо немножечко изменить реализацию конструктора студентов и добавить туда вызов конструктора личностей. Мы можем это сделать при помощи метода call. Вызываем наш конструктор личностей при помощи этого метода и в качестве контекста передаем туда this, а в качестве второго аргумента передаем имя создаваемого нами студента. Благодаря тому, что в конструкторе this будет ссылаться на новый объект создаваемый, в нашем случае — на нового студента, мы вызовем конструктор Person с контекстом в виде этого студента, и таким образом передаваемое имя мы положим в поле name именно для студента, и все будет работать.