转载来自51cto:https://blog.51cto.com/15127565/2667109

第一时间获取技术干货和业界资讯!

面试题:链表为什么使用内部类实现?

最近推广了一个关于面试的活动。我看了一下章节,其中有一个面试题是说什么是内部类?内部类的特点是什么?

看到这个题,我突然想到,工作这么多年,对内部类的关注一直都比较少。于是,在一次面试的机会中,我问了一个号称有 10 年工作经验的程序员:“链表为什么使用内部类实现?”

他支支吾吾,半天没有解释清楚为什么?于是,我百度搜索了很久,只发现阿里云上有一个免费的课程提到了“链表为什么使用内部类实现?”

但是这个解释非常的短,也非常的含蓄。所以,本文就根据我自己的工作经验来说说,链表为什么使用内部类实现?

面试题:链表为什么使用内部类实现?
说实话,Java 中使用链表的地方还是蛮多的,但是为什么不把链表单独抽取出来作为一个类,使用的地方组合或者继承一下呢?

要解释这个问题,我们先来看一看内部类的特点。

第一个特点,内部类可以访问其所在类的私有属性和方法。这一点就很像孕妈妈肚里的小宝宝一样,可以很方便的吸收一些妈妈的营养。以 HashMap 为例,它里面有好几个内部类。观察这几个内部类你会发现有一个共同特点就是内部类可以很方便的访问所在外部类的一些私有属性和方法。如果你把链表给抽取出来,你会发现,最终的链表实现起来难了很多。

第二个特点,内部类可以隐藏起来,不被同一个包中的其他类访问,如果一个类只对某个类提供使用,那么可以将其定义为内部类。这个特点在 HashMap 等集合中也有体现,具体来说就是各个内部类都是辅助所在的外部类的。作为外部类的一部分,具有强关联性。并且不希望除了所属的外部类使用外的其他类进行访问。

第三个特点,可以联合外部类解决多继承问题。这也是我认为非常重要的一个特点。还是以 HashMap 为例,它本身继承了 AbstractMap。但是它的所有内部类,都又有了各自的继承。

关于链表为什么使用内部类实现?我就通过以上 3 点来解释。其中最重要的我认为是第 3 点。以上,希望能够帮助到大家,如果有更好的观点,请公众号里留言评论,谢谢!