Java - 内部类

内部类的特点

  • 内部类可以有多个实例,每个实例有自己的状态信息,并且与外围对象的信息相互独立。
  • 内部类最大的优点是,完美的解决了多重继承的问题。每个内部类都能独立地继承一个(接口)实现,无论外围类是否已经继承,内部类无影响。内部类非“is-a”关系,内部类是个独立体。对于单个外围类,可以让多个内部类以不同的方式实现同一个接口或继承一个类。
  • 除外围类,其他类无法访问内部类。

注意

  • 外部类不能直接使用内部类的成员和方法,要先创建内部类对象,然后通过内部类对象来访问其成员变量和方法。
  • 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的,若要访问外部类的,可使用this 关键字 => outer.this.name。
  • 普通内部类的创建还是要依赖与外部类。

内部类分类

1 成员内部类

  • Inner 类在Outer 类的内部,相当于Ounter 类的一个成员变量的位置,可使用任意访问控制符。
  • Inner 类可以直接访问Outer 类的数据。
  • 定义了成员内部类后,必须使用外部类对象来创建内部类对象。
  • 编译后,会产生两个.class 文件[ outer.class, outer$inner.class{}]。
  • 成员内部类不能存在任何static 的变量和方法,但可以定义常量[ 编译期确定常量,直接放到常量池]。

2 静态内部类

  • 静态内部类不能直接访问外部类的非静态成员,可以通过 new Outer().成员 的方式访问。
  • 外部类与内部类的成员名称相同,可以通过 类名.静态成员 访问外部类的静态成员。若不同,直接 成员名 调用外部类的静态成员
  • 创建静态内部类的形象时,直接 内部类 对象名 = new 内部类() 。

3 方法内部类

  • 访问仅限于方法内或该作用域内
  • 局部内部类就像是方法里面的一个局部变量一样,无修饰符
  • 局部内部类只能访问方法中定义的final 类型的局部变量。[ 方法调用后,方法内的局部变量将消失,但方法内部类可能还存在,直到没有被引用时才会消失。所以,其访问的变量要用final 修饰,final 会保持对象的引用不会改变,编译器持续维护这个对象在回调方法中的生命周期。]
  • 局部内部类并不是直接调用方法传进来的参数,而是内部类将传进来的参数通过自己的构造器备份到自己的内部,自己内部的方法调用的,实际是自己备份的属性,而不是外部类方法的数据。

4 匿名内部类


  • 直接使用 new 来生成一个对象的引用。
  • 匿名内部类只能使用一次。
  • 匿名内部类必须、只能继承一个类或实现一个接口。
  • 匿名内部类中不能定义构造函数、不能有任何静态的东西。初始化 => 构造代码块。
相关文章: Java 内部类的使用
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PeersLee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值