import java.util.*;
public class Testsort 
{
public static void main (String [] args)
{
Maniger [] person = new Maniger[4];
person [0] = new Maniger ("张三",23);
person [1] = new Maniger ("李四",78);
person [2] = new Maniger ("王五",799);
person [3] = new Maniger ("赵六",2);
Arrays.sort( person);
for (int i = 0;i<4;i++)
{
System.out.println(person[i].salary);

}

}
}class Employee implements Comparable<Employee>
{
String name;
int salary=100;
Employee(String name)
{
this.name=name;
}
public int compareTo (Employee e)
{
if(this.salary<e.salary) return -1;
if(this.salary>e.salary) return 1;
return 0;
}

}
class Maniger extends Employee 
{
int salary = 500;
Maniger (String name,int salary)
{
super(name);
this.salary=salary;
System.out.println(this.salary);
} public int compareTo (Maniger m)
{
if(this.salary<m.salary) return -1;
if(this.salary>m.salary) return 1;
return 0;
}}
结果是:
23
78
799
2
23
78
799
2
为什么没排序成功 我觉得我覆盖了compareTo方法 为什么结果这样
我还试过 如果我只让Maniger类实现Comparable<M>接口 程序是可以排序的
为什么我这么改了下 就排不了了 编译时也没报错!

解决方案 »

  1.   

    我怎么没看到你调用根据salary来排序的方法?
      

  2.   

    Arrays.sort( person);
    这个方法调错了,
    public static void sort(Object[] a)
    根据元素的自然顺序对指定对象数组按升序进行排序跟你实现没实现Comparable完全没关系
    我估计你想调的方法是
    sort(T[] a, Comparator<? super T> c) 
    不过这样的话接口就实现错了
    应该实现Comparator
      

  3.   

    上面我弄错了哈,又看了下,是这样的
    Maniger的public int compareTo (Maniger m)
    其实是一个方法的重载,不是重写
    sort的时候,调用的其实还是Employee 的compareTo (Employee e)
    你可以在compareTo (Employee e)和compareTo (Maniger m)
    分别打印点东西,就能看出来
    一直比较调用的都是compareTo (Employee e)
    而你没有给Employee的salary赋值,所有对象这个值都是0
    返回的一直都是0,是不会有效果的
    你把Maniger里面的
    int salary = 500;
    删掉,就不会有问题了
      

  4.   

    你写int salary = 500;是为了 我想知道。
      

  5.   

    你确定所有对象的salary都是0?
      

  6.   

    父类Employee的salary的值始终是100
    然后Arrays.sort排序时调用的是父类Employee的CompareTo方法,而跟子类Manager的CompareTo无关
    public int compareTo (Employee e)
        {
            if(this.salary<e.salary) return -1;
            if(this.salary>e.salary) return 1;
            return 0;
        }这里边this.salary = 100,而e.salary也是100,所以返回的始终是0
      

  7.   

    谢谢楼上回答
    5楼和10楼的回答 让我明白很多 谢谢
    刚发现一个检测是否成功覆盖超类的语句
    @Override public boolean equals(Maniger m)
      

  8.   

    @Override public int compareTo (Maniger m)
      

  9.   

    Arrays.sort( person);
    这么大一行字 你看不到吗?
    包括2楼 真无语!