一、java是单继承,implements可以有多个
我们可以以这样子的格式进行集成和尊从接口:class Child extends Parent implements protocol1, protocol2 { };
Child类继承了Parent类,然后实现了接口protocol1,还有接口protocol2
因为java是单继承所以extends只能有一个
我们有时候会疑惑,我们是否可以使用抽象类来替代接口呢? 答案是可以的
abstract class AProtocol {......};
class Child extends AProtocol{......};
但是因为java是单继承,那么这个抽象的类被用在了继承这里,那么就没有办法再继承别的父类。所以正常会写成接口不会写成抽象类
二、对数组进行Sort
1、使用数组内置的比较器进行比较
Employee[] staff = new Employee[3]; staff[0] = new Employee("cc1", 75688, 1987, 10,1); staff[1] = new Employee("cc2", 75288, 1988, 6,2); staff[2] = new Employee("cc3", 75388, 1989, 1,1);
假设这里有Employee数组并且需要对Employee的salary进行排序;那么我们是不是可以这么做:Arrays.sort(staff); 编译发现不通过
因为sort对应的数组的Employee需要实现接口Comparable<T>
class Employee implements Comparable<Employee> { 。。。。。。 @Override public int compareTo(Employee employee) { return Double.compare(salary, employee.salary); } }
如上所示,需要实现Comparable<Employee> 的compareTo函数,通过salary进行比较大小
所以使用sort进行比较的时候需要实现Comparable<T> 的compareTo函数,其中T是要传入compareTo的参数类型
2、如果这里不使用实现接口Comparable<T> 的方式,而希望使用比较器也是可以的
我们平常对字符串进行sort的时候是直接sort没有使用比较函数;是因为String本身已经默认实现了Comparable<T> 的compareTo函数
那么我们如果要改变比较方式,比如:改为通过字符串的长度进行比较,因为我们不能对String进行继承(String是final class)所以只能使用比较函数的方式
Arrays.sort有这么一个函数:public static <T> void sort(T[] var0, Comparator<? super T> var1)
那么我们可以通过实现Comparator这个接口来进行比较
class LengthComparator implements Comparator<String> { @Override public int compare(String s, String t1) { return s.length() - t1.length(); } }
然后sort的调用方式的第二个参数是:新建该LengthComparator 类即可实现按照字符串的长度进行比较
String[] friends = {"aa", "aaa", "aaaaa", "a"}; Arrays.sort(friends, new LengthComparator());
标签:implements,sort,Comparable,java,String,接口,Employee,class From: https://www.cnblogs.com/czwlinux/p/16733176.html