2016-09-24 130 views
0

当实现可比接口并重写compareTo方法,重写compareTo时使用compareTo方法?

@Override 
public int compareTo(Name o) { 
    int val = this.name.compareTo(o.name); 
    if (val != 0) { 
     return val; 
    }   
    if (count != o.count) { 
     return count - o.count; 
    } 
} 

第三行,我发现我可以使用的compareTo当我重写它,它自动比较如下事情的自然顺序。但不可比较在可比接口中的抽象方法。没有定义它,它仍然会比较?另外,为什么我不需要使用super关键字来区分这个compareTo。

回答

1

您正在执行class Name extends Comparable<Name>中的方法compareTo。这个班有一个叫name的成员。如果你在第三行打电话Name.compareTo,你会从无限递归中崩溃,你也不能打电话给Comparable.compareTo,这确实是抽象的。

您正在调用X.compareTo,其中X是您声明成员变量name的类型。

换句话说,这只有在name不是instanceof Name时才有效。

顺便说一句,您将需要添加一个else语句返回语句到最后一个if语句块,否则此代码段将不会编译。