我需要在子类中覆盖CompareTo方法

问题描述 投票:1回答:3

我有一个实现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'的未命名模块中)

java generics comparable
3个回答
1
投票

你能发布失败的代码吗?

我只是在我自己的机器上试过它似乎工作。我可以重新创建错误的唯一一次是使用以下代码:b.compareTo((B) a);由于您无法将父类型转换为其子类型,因此无法工作。

此外,我认为这只是一个复制错误,但您在提供的代码中缺少括号,并且B类的构造函数与类名称不匹配。


0
投票

你在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;
}

0
投票

学生!= B

B类需要有一个名为B的构造函数

© www.soinside.com 2019 - 2024. All rights reserved.