我有一个实现Comparable接口的A类,以及一个扩展A的B类。我需要找到一种方法来覆盖B类中的compareTo
。
我发现了一个类似的问题Cannot use comparable with father-son-grandson inheritance并试图实现提供的解决方案
A类:
public class A<E extends A> implements Comparable<E>{
String surname;
int age;
A(String surname, int age){
this.surname = surname;
this.age = age;
}
public int compareTo(E o) {
int res=0;
res =this.surname.compareTo(o.surname);
if(res==0)
res = this.age-o.age;
return res;
}
B级:
public class B extends A<B> {
int num;
Student(String surname, int age, int num){
super(surname,age);
this.num = num;
}
@Override
public int compareTo(B o){
int res=0;
res =this.surname.compareTo(o.surname);
if(res==0)
res = this.age-o.age;
if(res ==0){
res= this.num-o.num;
}
return res;
}
例外:
线程“main”中的异常java.lang.ClassCastException:类T4.A不能强制转换为类T4.B(T4.A和T4.B在加载器'app'的未命名模块中)
你能发布失败的代码吗?
我只是在我自己的机器上试过它似乎工作。我可以重新创建错误的唯一一次是使用以下代码:b.compareTo((B) a);
由于您无法将父类型转换为其子类型,因此无法工作。
此外,我认为这只是一个复制错误,但您在提供的代码中缺少括号,并且B类的构造函数与类名称不匹配。
你在B
类中的方法应该写成:
@Override
public int compareTo(B o){
int res=0;
res =this.surname.compareTo(o.surname);
if(res==0)
res = this.age-o.age;
if(res ==0){
res= this.num-o.num;
}
return res;
}
学生!= B
B类需要有一个名为B的构造函数