当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: Q:其实内部类有什么好处呢?
 

 

    摘要: java.util包中包含了一系列重要的集合类。本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕。   下面我们先简单讨论一个根接口collection,然后分析一个抽象类abstractlist和它的对应iterator接口,并仔细研究迭代子模式的实现原理。   本文讨论的源代码版本是jdk 1.4.2,因为jdk 1.5在java.uti......
    摘要: 借助jdk 5.0的新特性annotations,你可以使用它代替先前使用的xdoclet,不过当且仅当使用jdk 5.0的时候,为了保持向下兼容,用xdoclet生成mapping files仍然是最好的选择。首先建立环境,将hibernate-annotations.jar和lib/ejb-3.0-edr2.jar复制到你的classpath下。官方的建议是将hibernate初始化放在st......


So what are inner classes good for anyway?(翻译 by Gee)
q:其实内部类有什么好处呢?

a:不管怎么说,内部类的存在有着它的长处.在我们开始探讨之前,让我来简单地介绍一下内部类的来由.

【程序编程相关:SUN JSR 168 portlet

【推荐阅读:java代码审查检查表

      内部类就是嵌套在另一个类的里面的类.一个一般的类是package的直接成员,也就是最顶层的类,而内部类就是在jdk1.1就出现的概念,它主要分成四类:

【扩展信息:给定周长下的三角形数量 Java Edi

1. 静态内部类

2.  一般内部类

3.  局部类

4.  匿名类

让我按次序来简单认识一下吧

简短地说,静态内部类也就是一个一般类的一个静态成员.像其他的静态方法一样,静态内部类可以访问顶层类的所有静态方法.

像静态内部类一样,一般内部类也是扮演着一般类的一个内部成员.但它不像静态内部类,一般内部类需要声明实例化,可以访问所有的成员与方法,甚至可以通过访问this这个reference访问顶层类的成员与方法.

局部类就是在一些语句块内声明与只能在语句块内才可以看到的类,就好像方法内的局部变量一样.

最后是匿名类,他也就是一个没有名字的局部类.

为了更明确的解答你的问题,我会把着重点放到你将会遇到的或者用上的一般内部类与匿名类.从我的角度来说,内部类的好处可以分成三个类别:在面向对象上的好处.在组织结构上好处与回调的好处.

在面向对象上的好处

以我的浅陋的认识来看,内部类最重要的特点就是允许我们把一些东西放到对象里面去,因为正常情况下我们一般不会这样做的.与如果没有内部类的出现相比,内部类这样的特点让我们的代码更加符合面向对象的思想.

让我们来看一下一般内部类,自从它的实例对象成为父实例对象的一个成员部分后,它可以访问父实例对象的所有成员属性与方法.乍眼看去,这好像不大像;但实际上我们已经访问了父实例对象内的方法了.然而内部类又允许我们在逻辑上从父实例对象中分离出来并具体化它.举个例子,一个树类,可能有一个方法或者许多辅助方法来实现这棵树的搜索或者遍历.从面对对象的观点来看,树类就是一棵树,不是一个搜索算法.但你要完成一个树的搜索操作,就必须与这棵树的数据结构有一个密切的关系.

一个内部类就是可以把这些逻辑去掉并把它们封装成一个自己的类.所以从面向对象的观点来说,我们已经把那些不属于该类的功能性的东西封装成一个自己的类.通过应用内部类,我们成功地把其搜索算法从树类中分离出来.那么现在,假如我们要改变搜索算法,我们就简单地替换这个内部类就可以了.而内部类在面向对象上的好处就说到这里了,其实我可以继续说下去,但这样会不断扩展地展示代码中面向对象技术带来的好处.

组织结构上的好处

面向对象设计并不是适合所有的东西的,但幸运的是,内部类还提供了其他更多的好处.从组织结构上的观点来看,内部类允许我们通过运用命名空间来更深层次地组织我们的包结构.类与类之间可以更深层次的嵌套,让层次结构更清晰,取代了这些类一箩筐似的倒在同一层次的包里面.显而易见,如果没有内部类,我们会局限于下面的层次结构:


...   下一页
    摘要: 天生就是一个糊涂鬼,改了这么多年了还是没有改回来,不知道怎么搞,我晕。 以前在用 math.***() 的时候,一直都把 java.math.* 给 import 进来,从来没有人跟我说过这是不必要的,今天看那个 j2se1.3 的 rose 模型,我才看到,也才恍然大悟,调用的时候用的就是调用 math 的类方法,也就是说 math 本身就是一个类,就是 java.lang.math,而且是......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE