public int compareTo(Object o) {
double h1 = this.height;
double h2 = ((Student)o).height;

return h1 > h2 ? 1 : -1;
}
tp://www.lcv.ne.jp/~kenmio/yomimono/yomimono105.htm

Student型をObject引数で受け取って、それもまたStudent型にキャストしてますが、
引数を最初からStudent型にはできないのですか。
それからStudent型の引数であれば、Object引数で受け取ったからといって
引数そのものが変わるわけでもないし、わざわざキャストしなくてもStudent型
のインスタンスだとコンパイラが判断できてもおかしくないと思うのですが。
スーパークラスのメソッドをサブクラスのインスタンスからアクセスできても
その逆はできないというきまりになっているようですが、この場合の引数は
Student型と決まっているのでそれはないと思うのですが。