/*
class A implements Comaprable<A>{
}
那么 A x = new A(); 类关系图
Object o = A; Object
Comparable c = A; | Comparable
A 实现了 Comparable 接口嘛 |-----|-----A
所以有 o instanceof A == true;o instanceof Comparable == true;例如ArrayList添加对象实例时,对象实例添加之后先向上转型为Object!内部用Object[]数组接收!Arrays.sort()对Object排序的函数内部就是将 Object 向下转型为Comparable类型。因为每个对象实现了Comparable接口,利用多态性,(Comparable)o1).compareTo(o2)将调用子类的compareTo()方法!((Comparable<Object>)o1).compareTo((Student)o2);((Comparable<XXX>)o1).compareTo((YYY)o2);如果想写泛型那么 XXX 要么是同一类型,要么XXX是YYY的父类!因为我们强转的Comparable是比较XXX类型数据的,而YYY类型满足上面的条件才能成功向上转型为XXX类型!
*/class Person implements Comparable<Person>{String name;int age;Person(){name = "";age = 0;}Person(String name, int age){this.name = name;this.age = age;}public String toString(){return name + "...." + age;}public boolean equals(Object o){Person x = (Person)o;return name.equals(x.name) && age==x.age;}public int compareTo(Person o){if(name.compareTo(o.name)==0)return o.age - age;return o.name.compareTo(name);}
}class Student implements Comparable<Student>{String name;int age;public Student(){name = "";age = 0;}public Student(String name, int age){this.name = name;this.age = age;}public int compareTo(Student o){if(name.compareTo(o.name)==0)return o.age - age;return o.name.compareTo(name);}
}public class Test{public static void main(String[] args){Person p = new Person("fsf", 45);Student s = new Student("faga", 20);Student ss = new Student("fsfdfsf", 456);Comparable xx = (Comparable)s;System.out.println(xx);cmp(s,ss);}public static int cmp(Object o1, Object o2){//return ((Comparable<Object>)o1).compareTo((Student)o2);return ((Comparable)o1).compareTo((Student)o2);}
}