Это не прямой ответ на ваш вопрос, потому что я думаю, что другие ребята ответили на ваше дело. Тем не менее, я заметил, что вы, кажется, находитесь в иллюзии, что объекты проверяются на соответствие типу памяти.
Они не проверяются на соответствие определениям классов. Позвольте мне привести вам пример, который, я надеюсь, принесет чувство понимания:
Скажем, у нас есть два класса, которые были определены в одном и том же пространстве имен, они имеют идентичные методы и свойства. Разница лишь в их названии класса. Что касается компилятора и среды выполнения, эти два класса не будут иметь никакого отношения .
Вы должны будете определить другой ООП способ их связи. Например, оба класса могут наследовать одного и того же родителя или оба они реализуют один и тот же интерфейс.
Использование метода Interface часто предпочтительнее, так как многие классы, которые имеют небольшие отношения, могут реализовать Interface, чтобы другие объекты могли взаимодействовать с ними через методы Interface.
ООП довольно сложно понять, потому что на самом деле речь идет об абстракции, и он очень мало связан с кодированием металла. Как только вы понимаете, для чего нужны абстракции и как они используются вместе, все становится проще. Удачи.