2015-08-09 68 views
1

对象用于代替界面?

public class Methods implements Comparator<String> { 


public int compare(String std1,String std2) 
{ 
    return std1.compareTo(std2); 
} 

public static void main(String[] args) { 

String[] string1={"Quan","Ha","Khai","Long","Han"}; 

    Methods me=new Methods(); 
    Arrays.sort(string1,me);// Arrays.sort(Object[] array,Comparator comp), me is Methods, not Comparator, but the Program also work well 
    System.out.println("Descending in string1: "); 
    for(String e: string1) 
    { 
     System.out.print(e+", "); 
    } 
} 

有人可以给我解释一下,为什么参数可以通过上述程序方法对象替换。谢谢

+0

我建议你阅读第一个参数'方法'再次实现了比较,想想这话说。 –

回答

3

me保留对Methods类型的实例的引用,该实例实现了Comparator<String>。因此它可以传递给期望Comparator<String>的方法,例如Arrayssort(T[] a, Comparator<? super T> c)

1

Methods实现Comparator界面,所以它也具有接口的类型。

1
Arrays.sort(string1,me); 
  • 排序方法采用一个数组并比较作为参数。

既然你Methods类实现Comparator,你也可以传递一个Methods对象。

1

当你正在做的排序方法有望Arrays.sort(string1,me)第二个参数是比较这是你的情况的方法。现在比较内部调用比较方法,并最终传递的结果,其中也不过是一个排序列表