匿名内部类&lambda表达式
1.匿名内部类
- 可以用于抽象类或者接口中,和普通类定义使用并无区别 只是一个无名的实现类 一次性使用 没有名字 所以是匿名内部类
- 匿名内部类中只需要重写抽象方法即可
- 常用于线程,集合
- 抽象类或接口定义
抽象类或接口定义
public abstract class Inter {
public abstract void method1();
public abstract void method2();
}
使用类
public class Demo {
public void demo(Inter inter) {
inter.method1();
inter.method2();
}
}
测试
public static void main(String[] args) {
Demo demo = new Demo();
//匿名内部类
demo.demo(new Inter() {
@Override
public void method1() {
System.out.println("method1 invoked ");
}
@Override
public void method2() {
System.out.println("method1 invoked ");
}
});
}
2 lambda表达式
- 仅用于接口中只有一个抽象方法时,匿名内部类可以简化为lambda表达式
- @FunctionalInterface 函数式接口 凡是接口上面有这种注解的都表示里面只有一个抽象方法 都可以使用lambda表达式
- jdk8以后
接口定义
public interface Inter {
void method1(Integer a, String b);
}
使用类
public class Demo {
public void demo(Inter inter) {
inter.method1(16, "abc");
}
}
测试类
public static void main(String[] args) {
Demo demo = new Demo();
demo.demo((a, b) -> {
System.out.println(a);
System.out.println(b);
}
);
}