梳理一下实现类、匿名类、内部类、匿名内部类、Lambda表达式以及优化Lambda表达式的关系,仅针对初学者。
自定义一个接口MyFunctionInterface,其中有且仅有一个抽象方法(接口中可以有其他非抽象方法内容),代码实现为:
1 | /* |
- 实现类(创建实现类对象)
实现接口MyFunctionInterface,重写其中的抽象方法;新建一个Java文件,实现类代码为:1
2
3
4
5
6
7
8public class MyFunctionInterfaceImpl implements MyFunctionInterface {
public void method() {
System.out.println("测试成功");
}
}
新建一个测试类,代码为:
1 | public class Demo { |
匿名类(创建匿名实现类对象)
1
2
3
4
5
6
7public class Demo {
public static void main(String[] args) {
new MyFunctionInterfaceImpl().method();
}
}内部类(不需要创建实现类对象)
1
2
3
4
5
6
7
8
9
10
11
12
13public class Demo {
public static void main(String[] args) {
MyFunctionInterface mi = new MyFunctionInterface() {
public void method() {
System.out.println("内部类测试成功");
}
};
mi.method();
}
}匿名内部类(不需要创建实现类对象)
1
2
3
4
5
6
7
8
9
10
11
12public class Demo {
public static void main(String[] args) {
new MyFunctionInterface() {
public void method() {
System.out.println("匿名内部类测试成功");
}
}.method();
}
}Lambda表达式
因为接口MyFunctionInterface中有且仅有一个抽象方法,所以是函数式接口,可以使用Lambda表达式,代码实现:1
2
3
4
5
6
7
8
9
10public class Demo {
public static void main(String[] args) {
MyFunctionInterface mi = () -> {
System.out.println("Lambda表达式测试成功");
};
mi.method();
}
}优化Lambda表达式
1
2
3
4
5
6
7
8public class Demo {
public static void main(String[] args) {
MyFunctionInterface mi = () -> System.out.println("优化Lambda表达式测试成功");
mi.method();
}
}
实际上,Lambda表达式常用作方法的参数或方法的返回值。
当Lambda表达式作为方法的形参:
1 | public class Demo { |
当Lambda表达式作为方法的返回值(这里使用接口Comparator< String >举例):
1 | public class Demo { |