匿名内部类与Lambda表达式习题
1.写一个函数式接口
public Operation{
public int calc(int a,int b);
}
在测试类中写一个method方法,参数为Operation和a,b
public static void method(Operation op)
int result = op.calc(a,b);
System.out.println(result);
}
在测试类中写一个main方法,完成下面的需求
1)调用method方法,传递Lambda表达式,求整数3和4求的和
2)调用method方法,传递Lambda表达式,求整数3和4求的最大值
3)调用method方法,传递Lambda表达式,求整数3和4求的最小值
public class Demo2 {
public static void main(String[] args) {
int a = 10, b = 20;
//Lambda表达式
//调用method方法,传递Lambda表达式,求整数3和4求的和
method((int a1, int b1) -> {
return a + b;
}, a, b);
//调用method方法,传递Lambda表达式,求整数3和4求的最大值
method((a1, b1) -> Math.max(a1, b1), a, b);
//调用method方法,传递Lambda表达式,求整数3和4求的最小值
method(Math::min, a, b);//直接使用Math类调用min静态方法
}
public static void method(Operation operation, int a, int b) {
int result = operation.calc(a, b);
System.out.println(result);
}
}
@FunctionalInterface
interface Operation {
int calc(int a, int b);
}
打印结果
------------------------------------------------------------------
30
20
10
2写一个Usb接口,要求有通电、加载驱动程序、运行三个方法
定义一个UseMouse鼠标类,实现Usb接口,复写三个方法
定义一个UsbKeyBoard键盘类,实现Usb接口,复写三个方法
写一个Computer电脑类,定义一个useUsb的方法,要求既能接收鼠标也能接收加键盘
把Usb作为方法的参数即可
写一个测试类,创建电脑对象,调用useUsb方法
【要求:使用三种方式实现】
public class Demo {
public static void main(String[] args) {
//创建电脑对象
Computer com = new Computer();
//创建鼠标对象
//创建鼠标实现类直接调用接口
UseMouse useMouse = new UseMouse();
com.useUsb(useMouse);
System.out.println("---------------");
//使用电脑对象调用统一方法(因为其不是静态方法)
//参数使用的是创建接口的实现对象,重写方法为匿名内部类
com.useUsb(new Usb() {
@Override
public void power() {
System.out.println("u盘通电");
}
@Override
public void loadDriver() {
System.out.println("u盘加载驱动");
}
@Override
public void run() {
System.out.println("u盘运行");
}
});
System.out.println("---------------");
//使用多态用接口引用接收 接口实现类对象
//参数使用的是创建接口的实现对象,重写方法为匿名内部类
Usb u =new Usb() {
@Override
public void power() {
System.out.println("键盘通电");
}
@Override
public void loadDriver() {
System.out.println("键盘加载驱动");
}
@Override
public void run() {
System.out.println("键盘运行");
}
};
//使用电脑类对象调用方法,将接口引用变量传入
com.useUsb(u);
}
}
//接口名,使用该接口则需重写
interface Usb{
void power();
void loadDriver();
void run();
}
//电脑类,统一使用接口的类中的方法(使用Usb规范)
class Computer{
public void useUsb(Usb u){
u.power();
u.loadDriver();
u.run();
}
}
//鼠标接口实现类
public class UseMouse implements Usb {
@Override
public void power() {
System.out.println("鼠标通电");
}
@Override
public void loadDriver() {
System.out.println("鼠标加载驱动");
}
@Override
public void run() {
System.out.println("鼠标运行");
}
}
打印结果:
鼠标通电
鼠标加载驱动
鼠标运行
---------------
u盘通电
u盘加载驱动
u盘运行
---------------
键盘通电
键盘加载驱动
键盘运行
-----------------------------------------