内部类详解

内部类的定义和优劣

内部类是定义在另一个类中的类。只有先定义外围类对象,才能定义内部类对象,格式如下:
外围类 外围类对象=new 外围类构造器;

外围类.内部类 内部类对象=外围类对象.new 内部类构造器;

内部类有以下优点:

  • 内部类可以访问该类定义所在的作用域中的数据,包括私有的数据。
  • 内部类可以对同一个包中的其他类隐藏起来
  • 当想定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。
  • 借助内部类可以实现多继承。

内部类的缺点:

  • 其他类可以通过一个类的内部类来访问这个类的私有成员
  • 内部类本身不能有static方法,但可以访问外围类的静态域和方法
  • 内部类中声明的所有静态域都必须是final。内部类锁引用的外围类变量一般也是final(保证安全)。因为如果域不是final,那么内部类的实例就可能不是唯一,这样外围类对象就不知道指向哪个内部类实例了。

内部类的存放形式

外围类和内部类在编译时会产生两个.class文件。内部类的对象总是存在一个隐式引用,它指向了创建它的外围类的对象,具体可以看下图:

在这里插入图片描述

内部类的分类

1.局部内部类
**适用场景:**局部内部类适用于类结构简单.是定义在一个方法中的类。
**特点:**
  • 局部类不能用public和private访问说明符进行声明。它的作用域被限定在声明这个局部内部类的块中
  • 局部类可以对外部完全隐藏起来。
  • 局部内部类不仅可以访问包含它们的外围类,还可以访问局部变量,不过这些局部变量必须声明为final,即一旦赋值就不会再改变了。
  • 局部变量的访问非常容易。它i减少了需要显示编写的实例域,从而使内部类更加简单;但是局部变量只有在使用的时候才加载,不用的时候就撤销了,这存在一部分的时间开销。
2.匿名内部类
**适用场景:**当只需要创建内部类的对象时,就不需要命名了,这就是匿名内部类。
**特点:**
  • 匿名内部类不能有构造器。这是因为构造器的名字必须和类名相同,而内部类没有类名。
  • Java程序员习惯用匿名内部类来实现事件监听器和其他回调。
3.静态内部类
**适用场景:**当使用内部类时只是为了隐藏内部类,并不需要引用外围类对象时,就可以使用静态内部类了。
**特点:**
  • 静态内部类没有对它外围类对象的引用特权
  • 静态内部类可以有静态域和方法
  • 声明在接口的内部类自动成为static和public类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值