b is referring to object of class B
//but at compile time compiler does not know whether b is referring
//to objet of B or object of C so it may think that the object referred
//by b can be of class C
In the example that you have given
Prasad, I totally agree that there might be a possibility where b might refer to object of C, but in the example I have given above there is no such possibility I think.
Henry, has also specified with the same sort of example that you have used.
Please clarify with the example I have provided.
And if you have any concrete rule to remember this please share that as well.