java内部类中的匿名内部类和lambda表达式

匿名内部类

作用 : 简化实现类|子类,没有自己类本身作用的实现类|子类

匿名内部类对象 : 实现类|子类+创建对象

new Smoke(){ //实现类类体|抽象类的子类类体
            @Override
            public void smoking() {
                System.out.println("边吸烟边吐烟圈...");
            }
        }

lambda表达式

作用 : 简化匿名内部类对象

前提 : 函数式接口

函数式接口 : 接口中只有一个必须被重写的抽象方法

强制检查是否为函数式接口 : @FunctionalInterface

语法 :

()->{}

() : 接口中抽象方法的参数列表

-> : lambda符号|箭头函数

{} : 重写方法的方法体

public class Class007_Outer {
    public static void main(String[] args) {
        //实现类对象
        Demo demo = new Demo();
        demo.smoking();

        //匿名内部类对象
        //1. 匿名对象 : 只能在当前位置使用一次
        new Smoke(){ //实现类的类体 | 匿名内部类的类体
            @Override
            public void smoking() {
                System.out.println("一边打游戏一边吸烟...");
            }
        }.smoking();


        //2.引用指向匿名内部类对象
        //接口多态 : 接口引用调用的为接口中定义的成员
        Smoke s = new Smoke(){

            @Override
            public void smoking() {
                System.out.println("一边上课一边抽烟");
            }
        };
        s.smoking();
        s.smoking();
        s.smoking();

        //3.匿名内部类对象作为方法的实参
        test(new Smoke() {
            @Override
            public void smoking() {
                System.out.println("xxxxxxxx");
            }
        });
    }

    public static void  test(Smoke smoke){
        smoke.smoking();
    }

}

interface Smoke{
    void smoking();
}

class Demo  implements Smoke{
    @Override
    public void smoking() {
        System.out.println("边吸烟边吐烟圈...");
    }
}

public class Class001_Lambda {
    public static void main(String[] args) {
        //匿名内部类
        /*Swim s = new Swim(){

            @Override
            public void swimming() {
                System.out.println("一边喝水一边游泳...");
            }
        };*/

        //Lambda写法1 : ()->{}
        /*Swim s = ()->{
            System.out.println("一边换气一边游泳...");
        };*/

        //Lambda写法2 : 如果方法体语句只有一句,前后的{}可以省略
        //Swim s = ()->System.out.println("一边嘻嘻笑一边游泳...");

        //Lambda写法3 : 如果方法存在参数,参数的类型可以省略
       // Swim s = (name,age)->System.out.println(name+"一边嘻嘻笑一边游泳...");

        //Lambda写法4 : 如果参数只有一个,前后的()可以省略
        //Swim s = name->System.out.println(name+"一边嘻嘻笑一边游泳...");

        //Lambda写法5 : 如果lambda体语句只有一句,并且为return语句,前后的{}与return关键字可以一起省略
        Swim s = age->age>18;

        System.out.println(s.swimming(18));;


    }
}

@FunctionalInterface
interface Swim{
    boolean swimming(int age);
    //void drinkWater();
}

interface Run{
    void run();
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值