接口的默认方法和静态方法:
Java8默认的方法和静态方法这个这两个新概念用来拓展接口的声明:
默认方法:允许在已有的接口中添加新方法,而同时又保持与旧版本的代码相兼容,默认方法与抽象方法不同之处在于抽象方法必须要求实现,但是默认方法则没有这个要求。接口的实现类默认继承默认方法。
静态方法:允许在已有的接口中添加静态方法,接口的静态方法属于接口本身,不能被继承,也需要提供实现方法。
默认方法和静态方法的访问:
接口的静态方法:直接用接口的类名.方法名
接口的默认方法:得到接口实现类对象,直接用对象的引用.方法名。默认方法可以直接被覆盖。
接口的定义
/**
*java8的静态方法和默认方法
* @author JACK
*
*/
publicinterface Java8Static {
void method(String ma);
//接口的默认方法
defaultvoid fun1() {
System.out.println("接口的默认方法");
}
//接口的静态方法
publicstaticvoid fun2() {
System.out.println("接口的静态方法");
}
}
接口的实现类
public class Java8T implements Java8Static {
@Override
public void method(String ma) {
System.out.println("接口方法的实现");
}
//重写接口的默认方法
@Override
public void fun1() {
System.out.println("子类重写父类默认方法");
}
public static void main(String[] args) {
//java8默认方法的访问
Java8T ja=new Java8T();
ja.fun1();
//java8静态方法的访问
Java8Static.fun2();
}
}
扫描二维码关注公众号,回复:
2161813 查看本文章
Lamada表达式
Lamada表达式的本质只是一个语法糖(所谓的语法糖是由英国计算机科学家彼得.兰丁发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用),有编译器推断并帮你转换包装为常规的代码,使用更简单的代码实现同样的功能。
直白一点:java8中Lamada表达式就是匿名类的另一种更简洁的语法表达。
注意:Lamada表达式只适用于接口中只有一个抽象方法的匿名内部类。
代码实例如下:
public class Java8Tester {
@SuppressWarnings("unchecked")
public static void main(String args[]){
List<String> test=Arrays.asList("a","c","d","s");
//java8之前版本的集合排序
Collections.sort(test, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return Collator.getInstance().compare(o1, o2);
}
});
System.out.println("Java8以前的版本"+test);
// Lamada表达式的应用基础版(参数主体,方法主题提出)
Collections.sort(test,(String o1, String o2)->{
return Collator.getInstance().compare(o1, o2);} );
System.out.println("基础的Lamada表达式"+test);
// Lamada表达式的应用简化版(方法体中只有一行代码时,可以直接取出大括号和return关键字)
Collections.sort(test,(String o1, String o2)-> Collator.getInstance().compare(o1, o2));
System.out.println("简化版的Lamada表达式"+test);
// Lamada表达式的应用最简版(可以去除参数的类型,java8会自动推断参数类型)
Collections.sort(test,(o1, o2)-> Collator.getInstance().compare(o1, o2));
System.out.println("最简版的java8中lamada表达式:"+test);
}
}