Interfaces are great when you have classes that do the same thing, but use different methods to achieve it.
Using your example, lets say we have something like this...
public interface ILongRangeWeapon
{
void Fire();
}
Now, lets say you have these classes...
public class Rifle : ILongRangeWeapon
{
public void Fire()
{
// Pull the trigger
}
}
public class NuclearMissile : ILongRangeWeapon
{
public void Fire()
{
// Press the red button
}
}
Now you can use ILongRangeWeapon in your code, and it doesn't matter which mechanism it uses to fire, it just knows that it CAN fire.
A more practical application would be connecting to the internet. There are multiple ways to connect, modem, lan, wifi, etc. However, you just don't even care HOW the instance connects, you just want it to connect.
There are some purists that say you should make everything an interface. I think it adds complexity where it isn't needed just for the sake of adding complexity. It's up to you as a developer to decide if you should use an interface or not.