cast to to super not working as expected
<p>Why does the second call produces what it does? I thought that by casting <code>this</code> to <code>Super</code>, only <code>Super's m1()</code> should be called!!</p>

<pre><code>Super!
And Sub!
---
Super!
And Sub!
</code></pre>

<p>Code:</p>

<pre><code>public class TestSuper {
    public static void main(String[] args) {
        (new Sub()).m1();
        System.out.println("---");
        (new Sub()).m2();                // !!!!!!!!!!!!!!!!
    }
}

class Super {
    void m1() {
        System.out.println("Super!");
    }
}

class Sub extends Super {
    void m1() {
        super.m1();
        System.out.println("And Sub!");
    }

    void m2() {
        ((Super) this).m1();
    }
}
</code></pre>
