In your "clone()" method, you've got
public Object clone()
{
Student otherStudent = (Student)other;
...
That "other" is referring to the member variable "other", which is a
String. You can't cast a String to Student, as they're unrelated ("inconvertible" meaning you can't convert one to the other.)
clone(), by the way, is supposed to create a new object. I can't tell what it is that you're doing in your clone() method, but it doesn't look like you're creating a new Student. The best implementation of clone() would probably be something like
Note, also, that in overriding equals(), you've made a common mistake: you've changed the type of the parameter so that you've actually overloaded it rather then overriding it. The signature of equals() must be
public boolean equals(Object o)
Finally, I can't tell what the member "other" is for, but it's
very confusing to have a member named "other" and have all your method parameters also named "other!"