前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java编程思想学习录(连载之:内部类)

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

作者头像
CodeSheep
发布2018-05-22 12:04:01
4580
发布2018-05-22 12:04:01
举报

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

Thinkpad 25 Anniversary
Thinkpad 25 Anniversary

用thinkpad打字确实很爽啊!


内部类基本概念

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

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


.this 与 .new 的使用场景

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

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


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

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

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


方法 作用域 内的内部类

可以称这类为 局部内部类

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

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


匿名内部类

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

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

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

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


总结:为什么需要内部类

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内部类基本概念
  • .this 与 .new 的使用场景
  • 嵌套类(static类型的内部类)
  • 在 方法 和 作用域 内的内部类
  • 匿名内部类
  • 总结:为什么需要内部类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档