I tend to think of an Interface as being a contract between an Object and the 'outside world'.
If an Object implements an Interface then it will provide those properties and methods defined by the interface.
A single object can implement multiple interfaces, which can be useful.
Multiple objects can implement a single interface, which can also be useful.
So, if I have two interfaces
IDisplayYourselfOnScreen
and
IMakeANoise
The Interfaces will just tell the outside world that an object implementing the IDisplayYourselfOnScreen will have an implementatino of the method "Show()" and one of Hide(); and a property of Hidden;
An object implementing IMakeANoise will have a method MakeSound(int volume).
If my main program now deals with the Interface, it can safely call methods on any object implementing the Interfaces to make a noise or show themselves, without worrying about how that is implemented - indeed the implementation can be completely changed without the rest of the application needing to be changed.
So if you were writing a game, and had two objects colliding, your logic might be something like
public void Collision(IDisplayYourselfOnScreen object1)
{
object1.Hide();
if (object1 implements IMakeANoise)
{
object1.MakeSound(10);
}
}
Your object1 could be the player, an enemy, a tree, whatever, as it implements an interface you guarantee it will respond (in some way) to the methods defined in the interface.