关于内部类和lambda的一些相关知识

内部类

内部类概念
在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类
内部类的访问特点
内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类的成员,必须创建对象、、

成员内部类

成员内部类的定义位置
在类中方法,跟成员变量是一个位置
外界创建成员内部类格式
格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
举例:Outer.Inner oi = new Outer().new Inner();

私有成员内部类和静态成员内部类
成员内部类,也属于(成员),既然是成员就可以被一些修饰符所修饰
private
私有成员内部类访问:在自己所在的外部类中创建对象访问。
static
静态成员内部类访问格式:外部类名.内部类名 对象名 = new 外部类名.内部类名();
静态成员内部类中的静态方法:外部类名.内部类名.方法名();

局部内部类

局部内部类定义位置
局部内部类是在方法中定义的类
局部内部类方式方式
局部内部类,外界是无法直接使用,需要在方法内部创建对象并使用
该类可以直接访问外部类的成员,也可以访问方法内的局部变量

匿名内部类

匿名内部类的前提
存在一个类或者接口,这里的类可以是具体类也可以是抽象类
匿名内部类的格式
格式:new 类名 ( ) { 重写方法 } new 接口名 ( ) { 重写方法 }
举例: new Inter(){
@Override
public void method(){}
}
匿名内部类的本质
本质:是一个继承了该类或者实现了该接口的子类匿名对象
匿名内部类的细节
匿名内部类可以通过多态的形式接收
Inter i = new Inter(){
@Override
public void method(){}
}

匿名内部类的使用场景

匿名内部类在开发中的使用
匿名内部类的本质是一个继承了该类或者实现了该接口的【子类匿名对象】
既然是对象,那就可以作为参数传递
所以,当发现某个方法需要,接口或抽象类的子类对象,我们就可以传递一个匿名内部类过去

lambda

把匿名内部类的主要方法体改成这个样子
(有参有传参,没有就算了)-> { 方法体 }

lambda和匿名内部类的一些区别

所需类型不同
匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
Lambda表达式:只能是接口
使用限制不同
如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式
实现原理不同
匿名内部类:编译之后,产生一个单独的.class字节码文件
Lambda表达式:编译之后,没有一个单独的.class字节码文件。对应的字节码会在运行的时候动态生成

匿名内部类的格式为 new 类名\接口名( ){ 重写方法 }
匿名内部类的本质是一个继承了该类,或实现了该接口的子类匿名对象
Lambda的格式 (形式参数)->{代码块}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值