day2_602:四种内部类对比概述 :-)

可以给我一个🆓的大拇哥吗?👍😚可以关注我,后续持续更新中……
(一起进步吧,你不是一个人。)

四种内部类对比

对比项非静态内部类(成员内部类)静态内部类局部内部类匿名内部类
是否需要外部类实例
是否可以访问外部类的 private 变量可以只能访问外部类的 static 变量可以可以
是否可以有 static 方法不能可以不能不能
是否可以有 static 变量不能可以不能不能
作用范围外部类的成员,适用于多个方法独立于外部类的实例,适用于工具类仅在定义它的方法内有效仅在创建它的地方使用
是否可以被继承可以可以不可以不可以
创建方式Outer.Inner inner = outer.new Inner();Outer.Inner inner = new Outer.Inner();在方法中 new Inner();直接 new 接口/抽象类() {}
适用场景需要访问外部类的 private 变量,逻辑紧密工具类、构建者模式仅在方法内临时使用适用于简化代码,如线程、事件监听

1. 非静态内部类(成员内部类)

static 的内部类,必须依赖外部类的实例,不能独立存在。它可以访问外部类的所有变量,包括 private 变量。

2. 静态内部类

使用 static 修饰的内部类,可以独立存在,不依赖外部类实例。它只能访问外部类的静态变量,不能访问实例变量。

3. 局部内部类

局部内部类定义在方法内部,它的作用范围仅限于该方法。它不能使用 static 修饰,因为它属于外部类的实例。

4. 匿名内部类

没有类名的内部类,通常用于接口、抽象类的实现,并在创建时立即实例化

总结

类型是否依赖外部类实例访问外部类变量是否可包含 static 成员使用场景
非静态内部类需要可以访问所有变量不能适用于访问外部类实例变量,增强封装性
静态内部类不需要只能访问 static 变量可以适用于工具类、构建者模式
局部内部类需要可以访问外部类和方法内 final 变量不能适用于方法内部的临时逻辑
匿名内部类需要可以访问外部类变量不能适用于简化代码,常用于事件监听

选择内部类类型时:

  • 如果需要访问外部类实例变量,选择非静态内部类
  • 如果类不依赖外部类实例,选择静态内部类
  • 如果类只用于方法内,可以使用局部内部类
  • 如果类只使用一次,可以使用匿名内部类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值