En java, le type de this est celui d'un objet de la classe courante. La méthode min de la classe Point sera donc typée comme prenant un object de type Point et retournant un object de type Point. Dans la méthode min de la classe Bipoint l'expression super.min(z) aura le type Point. Il faut donc utiliser une conversion pour en faire un object de type Bipoint. Connaissant le code de la classe Point nous pouvons en déduire que cette coercion est sûre, mais cette déduction n'est pas possible à partir de la seule connaissance du type de la classe Point.
Bipoint.java
class Point {
    int x;
    Point (int x0) { x = x0; }
    int getx () { return x; }
    Point min (Point z) {
        if (this.getx() < z.getx()) return thiselse return z;
    }
}

class Bipoint extends Point {
    int y;
    Bipoint (int x0, int y0) { super(x0); y = y0; }
    int gety () { return y; }
    Bipoint min (Bipoint z) {
        if (this.gety() < z.gety()) return this;
        else return (Bipoint)(super.min (z));
    }
}

class Main {
    public static void main (String arg[]) {
        Bipoint p = new Bipoint (1,2);
        Bipoint q = new Bipoint (2,1);
        Bipoint r = p.min(q);
        System.out.println(r.gety());
    }
}