Java 我的类不重写抽象方法compareTo

Java 我的类不重写抽象方法compareTo,java,abstract-class,compareto,Java,Abstract Class,Compareto,我的课程详细介绍了市中心餐馆的属性,所说的属性是x/y位置和排名。问题是,每当我运行程序时,它都会抛出一个错误,即非抽象类“闹市区”不会覆盖抽象方法“compareTo”。我不能使这个类抽象,因为我需要在这个代码块之外初始化对象。我的程序哪里出错了?我的compareTo实现有问题吗?如有任何建议,将不胜感激 public class Downtown implements Comparable<Downtown> {//Throws error on this line p

我的课程详细介绍了市中心餐馆的属性,所说的属性是x/y位置和排名。问题是,每当我运行程序时,它都会抛出一个错误,即非抽象类“闹市区”不会覆盖抽象方法“compareTo”。我不能使这个类抽象,因为我需要在这个代码块之外初始化对象。我的程序哪里出错了?我的compareTo实现有问题吗?如有任何建议,将不胜感激

public class Downtown implements Comparable<Downtown> {//Throws error on this line
    private int x;
    private int y;
    private int rank;

    public Downtown(int x, int y, int rank) {
        this.x = x;
        this.y = y;
        this.rank = rank;
    }
    //Appropriate setters and getters for x , y and rank
    public int getX() {
         return x;
    }
    public void setX(int x) {
    this.x = x;
    }
    public int getY() {
    return y;
    }
    public void setY(int y) {
    this.y = y;
    }
    public int getRank() {
    return rank;
    }
    public void setRank(int rank) {
    this.rank = rank;
    }   

    public int compareTo(Downtown p1, Downtown p2)//Actual comparison
    {
        // This is so that the sort goes x first, y second and rank last

        // First by x- stop if this gives a result.
        int xResult = Integer.compare(p1.getX(),p1.getX());
        if (xResult != 0)
        {
            return xResult;
        }

        // Next by y
        int yResult = Integer.compare(p1.getY(),p2.getY());
        if (yResult != 0)
        {
            return yResult;
        }

        // Finally by rank
        return Integer.compare(p1.getRank(),p2.getRank());
    }

    @Override
    public String toString() {
        return "["+x+' '+y+' '+rank+' '+"]";
    }
public类实现了可比较的{//在这一行上抛出错误
私人INTX;
私营企业;
私有整数秩;
市中心公共区(int x、int y、int rank){
这个.x=x;
这个。y=y;
这个.等级=等级;
}
//x、y和秩的适当设置者和获取者
公共int getX(){
返回x;
}
公共无效集合x(整数x){
这个.x=x;
}
公共int getY(){
返回y;
}
公共空间设置(整数y){
这个。y=y;
}
public int getRank(){
返回等级;
}
公共无效设置秩(整数秩){
这个.等级=等级;
}   
公共int比较(市区p1、市区p2)//实际比较
{
//这就是排序的顺序,先是x,后是y,最后是秩
//如果这给出一个结果,首先使用x-stop。
int xResult=Integer.compare(p1.getX(),p1.getX());
如果(xResult!=0)
{
返回结果;
}
//下一位是y
int yResult=Integer.compare(p1.getY(),p2.getY());
如果(yResult!=0)
{
返回yResult;
}
//最后按等级排列
返回整数.compare(p1.getRank(),p2.getRank());
}
@凌驾
公共字符串toString(){
返回“[”+x+“”+y+“”+rank+“”+“”+””;
}

compareTo方法应该将当前对象(
)与其他对象进行比较。它不应该有两个参数进行比较。您可以这样编写方法

public int compareTo(Downtown p2)//Actual comparison
{
    // This is so that the sort goes x first, y second and rank last

    // First by x- stop if this gives a result.
    int xResult = Integer.compare(getX(),p2.getX());
    if (xResult != 0)
    {
        return xResult;
    }

    // Next by y
    int yResult = Integer.compare(getY(),p2.getY());
    if (yResult != 0)
    {
        return yResult;
    }

    // Finally by rank
    return Integer.compare(getRank(),p2.getRank());
}

请注意,我如何将对
p1
的所有调用替换为对当前对象的调用。

compareTo方法应该将当前对象(
this
)与其他对象进行比较。它不应该有两个参数进行比较。您可以这样编写方法

public int compareTo(Downtown p2)//Actual comparison
{
    // This is so that the sort goes x first, y second and rank last

    // First by x- stop if this gives a result.
    int xResult = Integer.compare(getX(),p2.getX());
    if (xResult != 0)
    {
        return xResult;
    }

    // Next by y
    int yResult = Integer.compare(getY(),p2.getY());
    if (yResult != 0)
    {
        return yResult;
    }

    // Finally by rank
    return Integer.compare(getRank(),p2.getRank());
}
请注意,我如何将对
p1
的所有调用替换为对当前对象的调用。

Java的
Comparable
接口定义了
compareTo
方法,如下所示:

int compareTo(T o);
这意味着该方法必须采用一个参数;另一个参数是对象本身,即
This
。您需要实现此单参数方法而不是双参数方法来解决此问题

编译器将通过在方法上使用以下命令来帮助您解决此类问题:

@Override // Issues an error
public int compareTo(Downtown p1, Downtown p2)

@Override // Compiles fine
public int compareTo(Downtown other)
Java的
Comparable
接口将
compareTo
方法定义如下:

int compareTo(T o);
这意味着该方法必须采用一个参数;另一个参数是对象本身,即
This
。您需要实现此单参数方法而不是双参数方法来解决此问题

编译器将通过在方法上使用以下命令来帮助您解决此类问题:

@Override // Issues an error
public int compareTo(Downtown p1, Downtown p2)

@Override // Compiles fine
public int compareTo(Downtown other)

compareTo
只接受一个参数:
public int compareTo(闹市区p2)
。它应该将
p2
进行比较。compareTo()的签名错误。有关详细信息,请参阅。您的
compareTo
函数实际上包含3个
对象:
p1
p2、
。这不是
compareTo
的正确签名。提示:对应该被重写的方法使用
@Override
注释。您将得到一个编译器错误r如果方法签名错误,
compareTo
只接受一个参数:
public int compareTo(闹市区p2)
。它应该将
p2
进行比较。compareTo()的签名错误。有关详细信息,请参阅。您的
compareTo
函数实际上包含3个
对象:
p1
p2、
。这不是
compareTo
的正确签名。提示:对应该被重写的方法使用
@Override
注释。您将得到一个编译器错误r如果方法签名错误。,