Один из способов сделать это - загрузить два класса в разные загрузчики классов.Чтобы быть в полной безопасности, вам также необходимо запустить классы в изолированной программной среде безопасности, которая останавливает отражение, и другие механизмы, которые могут обойти барьер загрузчика классов.
На самом деле, я думаю, что может быть недостаток вэтот.Если два класса «player» реализуют один и тот же интерфейс, они могут полиморфно вызывать методы, определенные в общем интерфейсе.Тот факт, что они загружаются в разные загрузчики классов и поэтому не могут использовать типы друг друга, не останавливает это.
Итак, вы по существу полагаетесь на блокировку отражения (и хорошее программирование) для предотвращения одного класса/ объект выводит экземпляр другого.Блокирующее отражение также не позволяет одному классу нарушать инкапсуляцию другого или вызывать методы, которые не определены в общем суперклассе или общем интерфейсе.