Creating an object where the class name on the left and right sides are different
<p>I have seen a few references of instantiating a new object as follows, especially when using Inheritance.</p>

<pre><code>Cat cat = new Animal();
</code></pre>

<p>However, I do not know what this concept is called. and so, I'm unable to read up on it.</p>

<p>I have two questions.</p>

<ol>
<li>What is this concept called?</li>
<li>How is this possible, that, you can
    hold/refer to an object using a type that is different from it's
    original class?</li>
</ol>