Исходя из того, что вы пишете, я думаю, вы переоцениваете свое решение. Какую проблему вы пытаетесь решить? Посетитель посещает объекты в составной структуре и использует двойную диспетчеризацию, чтобы выбрать, какой метод вызывать. Все, что вам нужно для решения вашей проблемы, это суперкласс User
с методом setAccess
и подклассы, такие как Teacher
и Student
.