前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java--深入理解内部类

Java--深入理解内部类

作者头像
SuperHeroes
发布2018-05-22 16:29:29
3750
发布2018-05-22 16:29:29
举报
文章被收录于专栏:云霄雨霁
为什么使用内部类:

内部类最吸引人的原因是:每个内部类都可以独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了一个(接口的)实现,对内部类都没有影响。

如果没有内部类提供的、可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得更加完整。接口解决了部分问题,而内部类有效地实现了”多重继承“。也就是说,内部类允许继承多个非接口类型(类或抽象类)。

使用内部类的一些特性:
  • 内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立;
  • 在单个外部类中,可以让多个内部类以不同的方式实现同一个接口,或继承同一个类;
  • 创建内部类对昂的时刻并不依赖于外围类对象的创建;
  • 内部类并没有让人迷惑的“is-a”关系,它就是一个独立的实体。
闭包和回调:

闭包(closure):是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域。

通过这个定义,可以看出内部类是面向对象的闭包,因为它不仅包含外围类对象的信息,还自动拥有一个指向此外围类对象的引用,内部类有权操作所有成员,包括private成员。

回调(callback):使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。

Java最引人争议的问题就是,人们希望Java应该包含某种类似指针的机制,以允许回调。通过回调,对象能够携带一些信息,这些信息允许它在稍后的的某个时刻调用初始的对象。这是个非常有用的概念,但Java不支持指针。不过可以通过内部类提供的闭包功能来实现,他比指针更灵活,更安全。

内部类覆盖问题:

如果创建了一个内部类,然后继承其外部类并重新定义内部类时,内部类会被覆盖吗?答案是不会,就像是外部类的一个方法一样。这两个内部类完全是完全独立的两个实体,各自在各自的命名空间内。当然,明确地继承某个内部类是可以的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么使用内部类:
  • 使用内部类的一些特性:
  • 闭包和回调:
  • 内部类覆盖问题:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档