Q:

Casting class to its implemented interface

What is the purpose of the ability to cast to interface?
I have that interface 
public interface Iperson{ 
 String getTitle();
 int getID();
}

I have a class implementing it, e.g.
public class Person implements Iperson{

    public Person(){...}

    @Override
    public String getTitle() {
    return 'aaa';
    }

    @Override
    public int getID() {
        return '111';
    }    
}

In another class I have a function with the signature:
public boolean insert(Iperson somePerson)

What are the differences calling insert(somePerson) when somePerson is an instance of Person and when somePerson is a casted (Iperson)Person?
and when would one use the second option ?

A:

Absolutely nothing.
When you pass an object to a method, it is cast to the type of argument which the function requires. In this case, since you pass a Person to insert(), the Person is cast as an IPerson. 
If Person did not implement IPerson, then you could not pass it to insert(). However, since Person implements IPerson, it is implicitly cast to an IPesrson when it is passed to the insert(IPerson) function.

