If we take the code below:
Shape p1 = new Square(); Square c1; if(p1 instanceof Square) { c1 = (Square) p1; }
What does it mean t
That's not really a strong example, but here's what your code would look like.
Square c1 = new Square(); Shape p1 = c1;
(given that Square extends Shape of course)
Much better isn't it?
As for "why is it better", the other answers give out some important points.