问题描述
在学习接口的一章时,例子是使用Arrays.sort(Objecta),实现对象数组的排序,该对象所在的类必须实现Comparable<>接口,请问这个接口到底给sort方法提供了什么,为什么不可以直接在对象所属的类中定义这个接口中的方法呢??
解决方案
解决方案二:
这个接口就是用来告诉sort方法对象大小关系的,也叫自然序。有了比较的规则才能排序啊
解决方案三:
对象大小的关系不是在接口里的这个方法里咱们自己定义么,那现在我自己定义这个方法,不去implements这个接口,为什么不行?就是除了这个方法之外,这个接口还给sort方法提供了什么?
解决方案四:
引用1楼cumtwyc的回复:
这个接口就是用来告诉sort方法对象大小关系的,也叫自然序。有了比较的规则才能排序啊
对象大小的关系不是在接口里的这个方法里咱们自己定义么,那现在我自己定义这个方法,不去implements这个接口,为什么不行?就是除了这个方法之外,这个接口还给sort方法提供了什么?
解决方案五:
他就是一种默认的比较规则,在自己类中重写这个接口中的方法实现自己的规则。你如果不继承这个接口直接用Arrays.sort,他是不认compareTo方法的。因为单用这个Arrays.sort和compareTo是没有任何联系的。继承接口以后执行Arrays.sort时回调compareTo()方法,并按照自己的规则对对象数组进行排序。
解决方案六:
引用4楼liujianjun1536500976的回复:
他就是一种默认的比较规则,在自己类中重写这个接口中的方法实现自己的规则。你如果不继承这个接口直接用Arrays.sort,他是不认compareTo方法的。因为单用这个Arrays.sort和compareTo是没有任何联系的。继承接口以后执行Arrays.sort时回调compareTo()方法,并按照自己的规则对对象数组进行排序。
当然,这只是我个人的一点看法,一点理解,不周全。具体你可以查看api或其他资料.
解决方案七:
引用3楼an_kings的回复:
Quote: 引用1楼cumtwyc的回复:
这个接口就是用来告诉sort方法对象大小关系的,也叫自然序。有了比较的规则才能排序啊对象大小的关系不是在接口里的这个方法里咱们自己定义么,那现在我自己定义这个方法,不去implements这个接口,为什么不行?就是除了这个方法之外,这个接口还给sort方法提供了什么?
接口就是用来定义一种规范的,想实现排序就必须要实现这样的接口,这不能寄希望于程序员的自觉行为,那样不利于规范化,也无法保证移植性。换句话说,没有定义接口,你怎么知道自己实现的方法的签名是什么样的呢。这就是一种规定,要从全局角度理解这个问题,不要钻牛角尖。现在不理解没事,继续往下学,到时候这些知识自然就理解了