匿名内部类属于局部内部类吗_Java的四种内部类详解

966cbf80924634d0cb66ae8bf5cc6d48.png

内部类

1.什么是内部类

内部类:定义在其他类内部的类

内部类分为:成员内部类、静态内部类、局部内部类、匿名内部类

内部类在编译后会生成一个class文件,文件名命名为:

外部类名$内部类名.class

注意:内部类与外部类只在编译时有关联关系,编译结束后二者不再有包含关系

2.成员内部类

  • 定义在外部类的成员(属性、方法)位置
  • 可以使用四种访问权限修饰符修饰内部类
  • 可以在内部类的内部定义属性和方法

成员内部类示例:

485dae1b944f12f8751d67e0d581f798.png

创建内部类对象:先要创建外部类对象,然后使用外部类对象创建内部类对象

0e81d1490e5435da9b2df4ef4a3e1e8b.png

内部类可以有和外部类重名的属性和方法,内部类对象优先访问自己的属性和方法。内部类对象访问外部类对象的属性和方法,可以使用:

  • 外部类名.this.外部类属性
  • 外部类名.this.外部类方法(参数)

34354aee4e94bcd3b1e44edf36a826ff.png

成员内部类能不能定义静态属性?

成员内部类属于外部类对象,类的静态属性先于对象被创建,内部类静态属性被创建时还没有外部类对象,因此成员内部类不能有静态属性或方法。

3.静态内部类

  • 使用static修饰符修饰的成员内部类
  • 创建静态内部类的对象不需要创建外部类对象
  • 只能访问外部类静态的属性或方法

成员内部类示例:

e49bff28e11a9147e0d7ce532e1d7ed9.png

创建静态内部类:不需要创建外部类对象

110a2b16309a90434aeeb334ed90bf03.png

4.局部内部类

  • 方法内部定义的内部类
  • 作用范围等同于局部变量
  • 不能在作用范围以外创建对象
  • 可以访问外部类的属性和方法

局部内部类示例:

59153f3f0f9ec3672eb4c74ad65c1644.png

创建局部内部类:定义在其它方法中的局部内部类无法在主方法中创建对象

0e1730afdd4832151dfebd00d8234577.png

局部内部类、方法的形参和局部变量在方法结束后都会消失, 但是局部内部类的对象不会消失,所以如果局部内部类的对象 访问的形参和局部变量必须使用final修饰符修饰。

JDK1.8取消了此限制。

5.匿名内部类

匿名内部类示例:

4b73b16d91abc7c7bee3c07c2c78a96b.png

匿名内部类:没有类名,实现抽象类或接口

使用类、抽象类和接口可以创建匿名内部类,匿名内部类相当于在方法中声明的局部内部类,只是没有名字,只知道它的父类或实现的接口的名字。如果父类或实现的接口中有抽象方法,则匿名内部类必须实现所有的抽象方法。

使用匿名内部类的条件:

  • 特殊的局部内部类,所有局部内部类的特征匿名内部类全有
  • 必须知道它的父类或实现的接口
  • 只创建该类的一个对象

匿名内部类能不能定义构造方法?

匿名内部类不知道类名,所以不能定义构造方法,只能使用默认无参的构造方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值