原理上来讲是父类使用父类的compareTo方法,子类使用子类的compareTo方法。
但是在正常的使用中却会出问题,因为在比较这两个对象的时候,compareTo(T o),方法里的对象参数,我们会写成Object obj,等对象传入之后再判断,然后向下转型成为要比较的对象。如果是父类和子类同时在TreeSet里面,父类不能向下转为子类类型,此时会有 ClassCastException抛出。但如果先添加子类,最后再添加父类,这个时候就没有了这个问题了。因为子类可以向上转型为父类类型。
所以,一般来说如果子类父类各有自己的compareTo方法的时候,严谨的代码这时候肯定是会抛异常的。但如果子类不写compareTo方法的话,父类子类会共用一个compareTo方法,这时就没问题了 。
|