JavaSE --- 匿名内部类

文章介绍了Java编程中的内部类概念,包括其定义、使用场景和访问权限,并指出其用于增强封装性。接着,解释了匿名内部类的作用,主要用于简化创建子类对象的代码。然后,讨论了Lambda表达式,作为简化匿名内部类的一种方式,特别是对于函数式接口的应用。最后,提到了函数式接口的定义和Lambda表达式的简化规则。
摘要由CSDN通过智能技术生成

1.什么是内部类

内部类是在一个类里面又定义了一个类

例如

public class People{
    //内部类
    public class Heart{
    }
}

使用场景:

  • 当一个事物的内部,还有一部分需要一个完整的结构进行描述,而这个内部的完整的结构又为外部事物提供服务,那么整个内部完整结构可以选择内部类来设计
  • 内部类通常可以访问外部类的成员,包括私有成员
  • 内部类提供了更好的封装性,内部类本身就可以用private protected等来修饰,封装性可以做到很多控制

2.那么什么是匿名内部类呢?

本质上是一个没有名字的局部内部类,定义在方法中、代码块中等

作用:方便创建子类对象,最终目的为了简化代码编写

格式:

new 类|抽象类名|接口名(){
    重写方法
};

例子:

public class Test {
    public static void main(String[] args) {
        Animal a = new Animal() {
            @Override
            public void run() {
                System.out.println("老虎跑的快");
            }
        };
        a.run();

    }
}

//class Tiger extends Animal{
//    @Override
//    public void run() {
//        System.out.println("老虎跑的块");
//
//    }
//}

abstract class Animal{
    public abstract void run();

}

特点:

  • 没有名字
  • 写出来就会产生一个匿名内部类
  • 其对象类型相当于是当前new的那个的类的子类型

3.Lambda表达式

Lambda表达式是用于简化匿名内部类的代码写法。

格式:

(匿名内部类被重写方法的形参列表)->{
被重写方法的方法体代码。

}
// 注:-> 是语法形式,无实际含义

注意:Lambda表达式只能简化函数式 接口 的匿名内部类的写法形式

那么什么是函数式接口呢?

  • 首先它得是一个接口吧,然后接口中有且仅有一个抽象方法的形式
  • 通常我们回在接口上加一个@Functionallnterface注解,标记该接口必须是满足函数式接口。

例子:

public class LambdaDemo1 {
    public static void main(String[] args) {
        //原有的写法
        Animal a = new Animal() {
            @Override
            public void run() {
                System.out.println("乌龟跑的很慢");
            }
        };
        a.run();
        
        //Lambda写法
        Animal a1 = () -> { System.out.println("乌龟跑的很慢"); };
        a.run();

    }
}

//定义一个函数式接口
@FunctionalInterface
interface Animal{
    void run();
}

简化规则:

  • 参数类型可以省略不写。
  • 如果只有一个参数,参数类型可以省略,同时()也可以省略。
  • 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号!
  • 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return公语句,必须省略return不写,同时也必须省略”."不写

好了,只是简单的介绍语法,具体的还是要到开发时候使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值