cle*_*tus 11
一些内部类是公开的(例如Map.Entry在Java中),但这是例外而不是常态.
内部类基本上是一个实现细节.
例如,Swing广泛使用事件侦听器的内部类.如果没有它们,您最终会用一堆您不需要查看的类来污染全局命名空间(这可能会使其目的更难确定).
基本上内部类是范围的一种形式.包访问会从包外部隐藏类.私有内部类将该类隐藏在该类之外.
Java中的内部类也可以替代缺少函数指针或方法委托(在C#中)或闭包.它们是将函数传递给另一个函数的手段.例如,在Executor课堂上你有:
void execute(Runnable r);
Run Code Online (Sandbox Code Playgroud)
所以你可以传入一个方法.在C/C++中可以通过以下方式实现:
void execute(void (*run)());
Run Code Online (Sandbox Code Playgroud)
是一个函数的指针.
维基百科的这篇文章可能会帮助你理解为什么我们需要一个内部类:
正常或顶级类的一个实例可以在它的存在本身。相比之下,内部类的实例不能在没有绑定到顶级类的情况下进行实例化。
让我们以四轮汽车的抽象概念为例。我们的车轮具有依赖于成为我们汽车的一部分的特定功能。这个概念并不将车轮表示为可能是车辆一部分的更一般形式的车轮。相反,它将它们表示为特定于这一点。我们可以使用内部类对这个概念进行建模,如下所示:
我们有顶级的汽车。Car 类的实例由 Wheel 类的四个实例组成。Wheel 的这个特定实现是特定于汽车的,因此代码没有对 Wheel 的一般概念进行建模,后者可以更好地表示为顶级类。因此,它在语义上与 Car 类相连,Wheel 的代码以某种方式与其外部类耦合。
内部类为我们提供了一种机制来准确地模拟这种连接。我们说我们的轮子类是 Car.Wheel,Car 是顶级类,Wheel 是内部类。
因此,内部类允许程序的某些部分面向对象,否则这些部分将不会被封装到类中。
| 归档时间: |
|
| 查看次数: |
2171 次 |
| 最近记录: |