В аргументах этого метода - данные для конкретного класса, использующий интерфейс. Скажем, abstract class InteractData. От этого класса наследуешь под каждый тип триггера данные. В абстрактном классе можешь оставить enum InteractType, тип взаимодействия. Каждый триггер проверяет этот тип, и если он подходит для данного триггера, он распаковывает InteractData в конкретный класс и работает с ним
В теории IOpenable можно и письмам соотнести, так как суть в том же буле, но у письма может быть и другой функционал, поэтому его можно вынести в отдельный интерфейс
Типо, я, ты, сын маминой подруги - все это люди. Убийце все равно кого убивать - он абстрагируется от того, что убивает тебя, меня или сына маминой подруги. Ему важно знать, что он убивает людей. Такая вот кроважадная абстракция
Даже если так, я в вебе не особо использую тонкости ооп, ни абстракцию, ни наследование, ни полиморфизм, ничего такого. И как в коде это реализуется, плохо понимаю