Because of dynamic binding. The actual instance method that will be called depends upon the runtime type of the object you are using. Even if you type this. it still will look at the runtime type of the object and use the method of that type.
Be careful, with static elements and instance variables the behaviour is different in these cases. Try it out with a few examples is the best thing to do to get a clear idea on this subject.