Another common form of Blueprint Communication is through the use of Cast nodes. When using a Cast node, put simply you are asking the object "are you a special version of that object" and if so let me access you, if not then disregard my request.
For example, suppose you created a special Character Blueprint called "Flying Character Blueprint" that allows a player character to fly in your game. You could use a Get Player Character node to access the player character's movement component and affect the player in general ways such as setting its location, rotation, etc. You would not have access to the ability to fly as the Character Blueprint doesn't know about flying. Only the "Flying Character Blueprint" knows about flying. In this instance, you would get the player character and Cast To Flying Blueprint which would then grant you access to the flying function.
If the player character is not using the Flying Character Blueprint but instead is using a different type of Character Blueprint entirely, when we perform a Cast To Flying Blueprint it would fail since we are not using the Flying Blueprint and therefore would not be able to access and execute the flying command.