1、接口中默认方法和静态方法
- 在JDK8+的接口中可以包含普通方法,但是普通方法必须显式的有default(成员)或者static(类方法)修饰
- 以前的JDK7-的接口中是不能包含普通方法的,因为java是单继承,多实现,如果实现的多个接口中有同名的普通方法,就会发生调用冲突
- 如果一个类实现的多个接口中存在这个同名同参数列表的方法,则在该类中必须重写该方法
//接口中普通方法
interface A{
//由子类对象进行调用
default void show(){
System.out.println("这是接口中的方法");
}
//子类的实现类不可以调用接口中的静态方法
static void show1(){
System.out.println("接口中的静态方法");
}
}
2、Lambda表达式
- 接口可以是函数式接口,也可以不是,如果接口中不是函数式接口,此时该接口中只能有一个抽象方法;但是如果一个接口是函数式接口,则该注解[@FunctionalInterface],标注限制了接口中只能有一个抽象方法;
//1、使用TreeSet集合来排序
TreeSet<String> treeSet = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.hashCode() - o2.hashCode();
}
});
//2.1、Lambda表达式的形式实现比较器,表示形式一
TreeSet<String> treeSet1 = new TreeSet<>(
(o1, o2) -> {
return o1.hashCode() - o2.hashCode();
}
);
//2.2、Lambda表达式的形式实现比较器,表示形式二
TreeSet<String> treeSet2 = new TreeSet<>(
(o1, o2) -> o1.hashCode() - o2.hashCode()
);
//2.3、Lambda表达式的形式实现比较器,表示形式三
TreeSet<String> treeSet3 = new TreeSet<>(Comparator.comparingInt(String::hashCode));
3、方法与构造函数的引用
- 使用::做方法引用[其实也是Lambda表达式]