think in java 第七章 多形性 第三部分

这次我打算详细地研究一下think in java中内部类

我觉得think in java对这个部分解释得很复杂,可能要掺杂很多的个人理解,诸多谬误,有待更正。

特别感谢:http://blog.csdn.net/yu422560654/article/details/7466260

 

先来回顾上一次内部类的定义:

1.内部类

在Java 1.1中,可将一个类定义置入另一个类定义中。这就叫作“内部类”。内部类对我们非常有用,因为利用它可对那些逻辑上相互联系的类进行分组,并可控制一个类在另一个类里的“可见性”。然而,我们必须认识到内部类与以前讲述的“合成”方法存在着根本的区别。

通常,对内部类的需要并不是特别明显的,至少不会立即感觉到自己需要使用内部类。在本章的末尾,介绍完内部类的所有语法之后,大家会发现一个特别的例子。通过它应该可以清晰地认识到内部类的好处。

我的理解:

这样就算是内部类。但是使用起来有讲究,比如说:

在类的内部使用,看起来和平时没有什么两样。

但是如果要在类的外部使用,就要用特殊方法去获得内部类的对象:

总之,在这里类的作用范围显得很重要。内部类可以在类中调用,但是无法在类外创建和直接调用。正确的获取方式是在类内部创建get方法。

(1)内部类和上溯造型

迄今为止,内部类看起来仍然没什么特别的地方。毕竟,用它实现隐藏显得有些大题小做。Java已经有一个非常优秀的隐藏机制——只允许类成为“友好的”(只在一个包内可见),而不是把它创建成一个内部类。

然而,当我们准备上溯造型到一个基础类(特别是到一个接口)的时候,内部类就开始发挥其关键作用(从用于实现的对象生成一个接口句柄具有与上溯造型至一个基础类相同的效果)。这是由于内部类随后可完全进入不可见或不可用状态——对任何人都将如此。所以我们可以非常方便地隐藏实施细节。我们得到的全部回报就是一个基础类或者接口的句柄,而且甚至有可能不知道准确的类型。

我的理解:

举个例子:

 

为什么要使用内部类?一个原因是为了隐藏实现细节。因为一个内部类只能在类中调用,如果不写get方法,我们在类外至始至终都无法得知类内部发生了什么。所以内部类可以起到很好的隐藏效果。

发表评论

电子邮件地址不会被公开。 必填项已用*标注