/*
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);}
}