第一时间获取技术干货和业界资讯!程序员
最近推广了一个关于面试的活动。我看了一下章节,其中有一个面试题是说什么是内部类?内部类的特色是什么?面试
看到这个题,我忽然想到,工做这么多年,对内部类的关注一直都比较少。因而,在一次面试的机会中,我问了一个号称有 10 年工做经验的程序员:“链表为何使用内部类实现?”ide
他支支吾吾,半天没有解释清楚为何?因而,我百度搜索了好久,只发现阿里云上有一个免费的课程提到了“链表为何使用内部类实现?”阿里云
可是这个解释很是的短,也很是的含蓄。因此,本文就根据我本身的工做经验来讲说,链表为何使用内部类实现?blog
说实话,Java 中使用链表的地方仍是蛮多的,可是为何不把链表单独抽取出来做为一个类,使用的地方组合或者继承一下呢?继承
要解释这个问题,咱们先来看一看内部类的特色。it
第一个特色,内部类能够访问其所在类的私有属性和方法。这一点就很像孕妈妈肚里的小宝宝同样,能够很方便的吸取一些妈妈的养分。以 HashMap 为例,它里面有好几个内部类。观察这几个内部类你会发现有一个共同特色就是内部类能够很方便的访问所在外部类的一些私有属性和方法。若是你把链表给抽取出来,你会发现,最终的链表实现起来难了不少。class
第二个特色,内部类能够隐藏起来,不被同一个包中的其余类访问,若是一个类只对某个类提供使用,那么能够将其定义为内部类。这个特色在 HashMap 等集合中也有体现,具体来讲就是各个内部类都是辅助所在的外部类的。做为外部类的一部分,具备强关联性。而且不但愿除了所属的外部类使用外的其余类进行访问。百度
第三个特色,能够联合外部类解决多继承问题。这也是我认为很是重要的一个特色。仍是以 HashMap 为例,它自己继承了 AbstractMap。可是它的全部内部类,都又有了各自的继承。表单
关于链表为何使用内部类实现?我就经过以上 3 点来解释。其中最重要的我认为是第 3 点。以上,但愿可以帮助到你们,若是有更好的观点,请公众号里留言评论,谢谢!