2016-09-24 8 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を使用できることを理解し、それが自動的に物事を比較自然な順序に従います。しかし、compareToは比較可能なインタフェースの抽象メソッドではありません。それを定義することなく、それはまだ比較しますか?また、なぜ私はこのcompareToを区別するためにスーパーキーワードを使用する必要はありません。

答えて

1

class Name extends Comparable<Name>compareToメソッドを実装しています。このクラスにはnameというメンバがあります.3行目でName.compareToを呼び出していた場合、無限再帰からクラッシュすることはなく、Comparable.compareToも実際には抽象的なコールはできません。

X.compareToを呼び出しています.Xは、メンバ変数nameで宣言した型です。

つまり、これはnameinstanceof Nameでない場合にのみ機能します。

ところで、最後のifブロックにreturnステートメントを付けたelseブランチを追加する必要があります。そうしないと、このスニペットはコンパイルされません。

関連する問題