Интерфейс это перечень методов, а если чуть абстрагироваться, то это определенная 
модель поведения и когда какой-то класс реализует интерфейс это означает, что он гарантированно поддерживает описанную в интерфейсе модель поведения. Тем самым если у вас есть определенный набор 
разных классов (в данном случае это Цех и Отдел), но поддерживающих одну и ту же модель поведения (интерфейс Подразделение), то это позволяет вам взаимодействовать с ним не глядя на то, к какому конкретно классу они принадлежат. 
Сценариев применения на практике - множество, но вот вам простейший:
Допустим у вас есть задача (взято с потолка) посчитать ежедневные затраты на питание всех сотрудников того или иного подразделения. В итоге получается, что нам нужен метод, который принимал бы в качестве аргумента экземпляр подразделения и возвращал бы конкретную сумму.
// Subdivision это тот самый интерфейс "Подразделение"
int getFoodCost(Subdivision subdivision) {
	// допустим, что на каждого человека тратится по 300 руб в день
	return subdivision.numberOfEmployers() * 300;
}
В результате мы получаем метод, который может работать абсолютно с любыми классами, которые реализуют интерфейс Subdivision. А вот если бы вы 
не использовали интерфейс, а просто добавили бы в каждый класс по методу numberOfEmployers(), то для каждого класса пришлось бы писать свою версию getFoodCost().