Мне нужно переписать метод CompareTo в подклассе - PullRequest
1 голос
/ 29 марта 2019

У меня есть класс A, который реализует интерфейс Comparable, и класс B, который расширяет A. Мне нужно найти способ перезаписать compareTo в классе B.

Я нашел похожий вопрос Невозможно использовать сравнимо с наследием отца-сына-внука И попытался реализовать предложенное решение

Класс 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')

Ответы [ 3 ]

1 голос
/ 29 марта 2019

Можете ли вы опубликовать код, который не работает?

Я только что попробовал это на моей собственной машине, и это, кажется, работает. Единственный раз, когда я мог воссоздать ошибку, был следующий код: b.compareTo((B) a); Что не может работать, так как вы не можете привести родительский тип к его дочернему типу.

Кроме того, я думаю, что это просто ошибка копирования, но в предоставленном коде отсутствуют скобки, и конструктор класса B не соответствует имени класса.

0 голосов
/ 29 марта 2019

Студент! = B

Класс B должен иметь конструктор B

0 голосов
/ 29 марта 2019

Ваш метод в классе 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...