- 接口默认方法(Default Methods)
- 函数式接口(SAM类型的接口(Single Abstract Method))
- lambda表达式
- 方法引用
接口默认方法(Default Methods)
接口定义:
public interface FunctionInter { /** * 接口默认方法1 (默认方法可有多个) */ default String testdefaultFunction1(){ System.out.println("testdefaultFunction1"); return "testdefaultFunction1"; } /** * 接口默认方法2 (默认方法可有多个) * @return */ default String testdefaultFunction2(){ System.out.println("testdefaultFunction2"); return "testdefaultFunction2"; } /** * 接口可定义静态变量 */ public static String foo = "foo"; /** * 接口可定义静态方法 * @return */ public static String testFunctionInterStatic(){ System.out.println("testFunctionInter"); return "testFunctionInterStatic"; } /** * 接口可定义抽象方法 */ public abstract void testAbstract(); }
接口实现:
public class FunctionInterfaceTest implements FunctionInter { @Override public void testAbstract() { System.out.println("testAbstract"); } public static void main(String[] args) { FunctionInterfaceTest item = new FunctionInterfaceTest(); //默认方法 item.testdefaultFunction1(); //默认方法 item.testdefaultFunction2(); //抽象方法 item.testAbstract(); //接口静态方法调用 通过接口来调用 FunctionInter.testFunctionInterStatic();// 接口静态方法调用 正确 // item.testFunctionInterStatic(); 接口静态方法调用 错误 // FunctionInterfaceTest.testFunctionInterStatic(); 接口静态方法调用 错误 //接口静态变量调用 通过实现类来调用 System.out.println(FunctionInterfaceTest.foo); //接口静态变量调用 通过接口来调用 System.out.println(FunctionInter.foo); } }
- 接口定义中新增带有默认实现的方法
- 接口定义抽象方法
- 接口定义静态变量和静态实现方法
- 静态变量可被实现类引用,静态实现方法不可以被实现类引用
函数式接口
函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口(Single Abstract Method)。定义了这种类型的接口,使得以其为参数的方法,可以在调用时,使用一个lambda表达式作为参数。从另一个方面说,一旦我们调用某方法,可以传入lambda表达式作为参数,则这个方法的参数类型,必定是一个函数式的接口,这个类型会使用@FunctionalInterface进行修饰,或者抽象方法只有一个的接口不用@FunctionalInterface修饰也可作为函数式接口来用。
从SAM原则上讲,这个接口中,只能有一个函数需要被实现,但是也可以有如下例外:
1. 默认方法与静态方法并不影响函数式接口的契约,可以任意使用,即
函数式接口中可以有静态方法,一个或者多个静态方法不会影响SAM接口成为函数式接口,并且静态方法可以提供方法实现
可以由 default 修饰的默认方法方法,这个关键字是Java8中新增的,为的目的就是使得某一些接口,原则上只有一个方法被实现,但是由于历史原因,不得不加入一些方法来兼容整个JDK中的API,所以就需要使用default关键字来定义这样的方法
2. 可以有 Object 中覆盖的方法,也就是 equals,toString,hashcode等方法。
JDK中以前所有的函数式接口都已经使用 @FunctionalInterface 定义,可以通过查看JDK源码来确认,以下附JDK 8之前已有的函数式接口:
java.lang.Runnable
java.util.concurrent.Callable
java.security.PrivilegedAction
java.util.Comparator
java.io.FileFilter
java.nio.file.PathMatcher
java.lang.reflect.InvocationHandler
java.beans.PropertyChangeListener
java.awt.event.ActionListener
javax.swing.event.ChangeListener
函数式接口定义方式1 (不用@FunctionalInterface修饰,但是函数式接口必须只有一个抽象待实现的方法,可以包含其他的默认的实现方法或者静态的已实现方法)
public interface FunctionInterfaceDefine { public String functionBody(); default String defaultBody(){ return "defaultBody"; } }
相关推荐
本视频为java8新特性,百度云链接和密码,永久有效,失效联系我
Java8是Java编程语言的一次重大更新,引入了许多新的特性和功能,极大地提升了开发效率和代码的可读性。以下是一些主要的Java8新特性详解: 1. **Lambda表达式**:Lambda表达式是Java8中最显著的新特性,它为Java...
Java 8是Java语言发展的一个重要里程碑,引入了许多创新性的特性和改进,...黑马程序员的Java8新特性详解笔记和源码提供了深入学习这些概念的资源,结合实际的代码示例,将有助于你更好地理解和掌握Java 8的核心特性。
在Java 8中,最重要的两个新特性无疑是Lambda表达式和Stream API。这两个特性都与函数式编程思想密切相关,让Java开发者能够更加灵活地处理数据。 ### Lambda表达式 Lambda表达式是Java 8中最显著的新特性之一,它...
根据提供的文件信息,我们可以深入探讨Java 8的新特性。这些特性极大地提高了Java语言的功能性和效率,使得开发人员能够编写更加简洁、高效的代码。 ### Java 8 新特性概述 #### Lambda 表达式 Lambda表达式是Java...
尚硅谷Java视频Java8新特性视频教程尚硅谷Java视频Java8新特性视频教程尚硅谷Java视频Java8新特性视频教程
Java 8是Java语言发展的一个重要里程碑,引入了许多创新特性,极大地提升了开发效率和代码质量。以下是关于Java 8新特性的详细讲解: ...通过观看“Java8 新特性视频教程”,你可以深入理解并熟练运用这些特性。
这个压缩包文件“基于java8新特性+反射机制实现list不同实体类互转.zip”提供了一种解决方案,它利用了Java 8的新特性和反射机制来实现这种转换,并将这个功能封装为一个工具类。 首先,Java 8引入了许多新特性,...
Java 8 新特性 ---- 代码 Java 8 新特性 ---- 代码 Java 8 新特性 ---- 代码 Java 8 新特性 ---- 代码 Java 8 新特性 ---- 代码 Java 8 新特性 ---- 代码 Java 8 新特性 ---- 代码 Java 8 新特性 ---- 代码 Java 8 ...
java8新特性-1-函数式编程.pptxjava8新特性-1-函数式编程.pptx
但是我们实际开发中真正用到的新特性并不多,大多数人也仅仅用用lambda,而对于其他的特性,比如:多重注解、Date API、函数式接口等等并没有使用起来,本资源包含作者的学习java8新特性的笔记,笔记中有讲解和代码...