专栏首页CodeSheep的技术分享Java编程思想学习录(连载之:内部类)

Java编程思想学习录(连载之:内部类)

Java编程思想学习录连载文章

用thinkpad打字确实很爽啊!


内部类基本概念

  • 可将一个类的定义置于另一个类定义的内部
  • 内部类允许将逻辑相关的类组织在一起,并控制位于内部的类的可见性
  • 甚至可将内部类定义于一个方法或者任意作用域内!
  • 当然,内部类 ≠ 组合
  • 内部类拥有其外围类 所有元素的 访问权
  • 更有甚,嵌套多层的内部类能透明地访问所有它所嵌入的外围类的所有成员

一个典型的例子:利用 Java内部类 实现的 迭代器模式


.this 与 .new 的使用场景

.this用于在内部类中生成对其外部类对象的引用之时,举例:

.new用于直接创建内部类的对象之时,距离:


嵌套类(static类型的内部类)

嵌套类是无需依赖其外部类的对象的。非static内部类通过一个特殊的this链接到其外围类的对象,而static类型的内部类无此this引用。

接口与内部类有着很有趣的关系: 放到接口中的任何类自动都是public且static,即接口中的任何类都是嵌套类,我们甚至可以在接口的内部类中去实现其外围接口,举例:


方法 作用域 内的内部类

可以称这类为 局部内部类

方法中定义的内部类只能在方法内被使用,方法之外不可访问,举例:

更进一步,可在任意作用域内定义内部类,举例:


匿名内部类

直观上看,这种内部类没有“名字”,举例:

若想将外部的参数传到匿名内部类中(典型的如将外部参数用于对匿名内部类中的定义字段进行初始化时)使用的话,该参数必须final,举例:

匿名内部类中不可能有命名的显式构造器,此时只能使用实例初始化的方式来模仿,举例(当然下面这个例子还反映了匿名内部类如何参与继承):

匿名内部类 + 工厂模式 = 更加简洁易懂:


总结:为什么需要内部类

内部类可以独立地继承自一个接口或者类而无需关注其外围类的实现,这使得扩展类或者接口更加灵活,控制的粒度也可以更细!

注意Java中还有一个细节:虽然Java中一个接口可以继承多个接口,但是一个类是不能继承多个类的!要想完成该特性,此时除了使用内部类来“扩充多重继承机制”,你可能别无选择,举例:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Pipeline As Code With Jenkins2.0

    CodeSheep
  • 函数式编程思维在三行代码情书中的应用

    CodeSheep
  • Java编程思想学习录(连载之:一切都是对象)

    CodeSheep
  • java内部类的全面总结

    三哥
  • java内部类 java内部类作用

      1.每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。内部类使得多继承的解决方案变得完整,

    会说话的丶猫
  • 匿名内部类

    内部类:在一个类的内部定义了另外的类,称为内部类。 匿名内部类指的是没有名字的内部类。 为了清楚内部类的主要作用,下面首先来观察如下的程序:

    葆宁
  • 「JAVA」从语法到案例,从定义到使用,详细解释Java 内部类的完全实现

    Java 类中的可以定义的成员有:字段、方法、内部类,内部类是定义在类结构中的另一个类,因为定义在类的内部,故称为内部类。

    老夫编程说
  • java提高篇之详解内部类

    内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二)。

    哲洛不闹
  • Java--深入理解内部类

    SuperHeroes
  • Java的内部类详解(结合代码全面分析)

    ​ 内部类是一种特殊的类,指的是定义在一个类的内部的类。实际开发中,为了方便的使用外部类的相关属性和方法,这时候我们通常会定义一个内部类。

    bboy枫亭

扫码关注云+社区

领取腾讯云代金券