匿名内部类与Lambda表达式

JAVA匿名内部类与Lambda表达式

一,匿名内部类

匿名对象: 是对象,没有引用指向这个对象,没有类名的类

匿名内部类 : 没有名字的一个内部类
作用: 简化没有类本身作用,只为了重写的一些抽象方法,方便调用这个方法 ,匿名内部类就可以简化这种实现类
简化符合需求的实现类,子类->接口或抽象父类

匿名内部类的使用方法:

public class Anonymous {
    public static void main(String[] args) {
        //匿名内部类没有类名,通过引用地址来实现
        new Run(){
            public void run(){
                System.out.println("跑的飞快");
            }
        }.run();//匿名内部类的对象后面可直接调用方法
		
        //或者接收匿名内部类的地址,再通过地址调用成员方法
        Run run = new Run(){
            public void run(){
                System.out.println("跑的起飞");
            }
        };
        run.run();
		//也可以作为一个方法的实参,传入形参当中
        test(new Run() {
            @Override
            public void run() {
                System.out.println("芜湖~");
            }
        });

    }
    public static void test(Run run){
        run.run();
    }
}

//定义一个Run接口
interface Run{
    void run();
}

二,Lambda表达式

Lambda 表达式jdk 8新增的功能,作用: 就是为了简化匿名内部类结构

前提: 函数式接口

​ 函数式接口 : 只存在一个必须被重写的抽象方法的接口
​ 检查一个接口是否为函数式接口: @FunctionalInterface

​ 结构:()->{}
​ () : 重写的抽象方法的参数列表
​ {} : 重写抽象方法的方法体
​ -> : lambda符号,箭头符号,具有上下文推导的作用

//函数式接口只能有一个抽象方法,但可以存在静态方法与默认方法
//利用@FunctionalInterface注解可以检查接口是否为函数式接口
@FunctionalInterface
interface Jump{
    void jump();
}

lambda表达式的使用方法

public class LambdaClass {
    public static void main(String[] args) {
        
        Jump j = null;
        //无参方法
        Jump b = () -> {
            System.out.println("唱");
        };
        b.jump();
		//当方法体里只有一句语句时,可省略{}
        j = () ->  System.out.println("跳");
        j.jump();

        Jump a = () -> {
            System.out.println("rap");
        };
        a.jump();

        //有参方法
        Music l = (str) -> { return str;};
        System.out.println(l.music("篮球"));
		//当调用一个有且只有一个参数并有返回值类型的方法时,
        //且方法体语句只有return语句时,
        //可以省略参数的()和方法体语句里的{}和return
        Music m = str -> str;
        System.out.println(m.music("music"));
    }

}
//定义一个Jump接口
@FunctionalInterface
interface Jump{
    void jump();
}
//定义一个Music接口
interface Music{
    String music(String str);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值