JAVA内部类(下)

JAVA内部类(下)

ID:45849208

大小:245.00 KB

页数:9页

时间:2019-11-18

JAVA内部类(下)_第1页
JAVA内部类(下)_第2页
JAVA内部类(下)_第3页
JAVA内部类(下)_第4页
JAVA内部类(下)_第5页
资源描述:

《JAVA内部类(下)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、JAVA内部类(下)内部类就像大家闺秀一样,虽然身居类的内部,却和外界有着剪不断理还乱的丝丝缕缕的联系……古代一般人家的姑娘都要深居简出,但格格就不一样了,她们可以假扮成阿哥偷偷出宫,皇阿玛拿她也没辙。静态内部类就是这样一位格格。为创建一个static内部类的对象,我们不需要一个外部类对象。不能从static内部类的一个对象中访问一个外部类对象。由于static成员只能位于一个类的外部级别,所以内部类不可拥有static数据或static内部类。 倘若为了创建内部类的对象而不需要创建外部类的一个对象,那么可将所有东西都设为static。为了能正常工作,同时也必须将内部类设为sta

2、tic格格级别内部类代码:com.li.staticinner在main()中,我们不需要Girl的对象,就像一个格格不需要通过皇阿玛的允许就私自出宫会情夫一样。相反,我们用常规的语法来选择一个static成员,以便调用将句柄返回AAge和Name的方法。通常,我们不在一个接口里设置任何代码,但static内部类可以成为接口的一部分。由于类是“静态”的,所以它不会违反接口的规则——static内部类只位于接口的命名空间内部:再看代码:com.li.staticinner.IOther再叙格格特权若想生成外部类对象的句柄,就要用一个点号以及一个this来命名外部类。举个例子来说,在

3、Girl.Name类中,它的所有方法都能产生外部类Girl的存储句柄,方法是采用Girl.this的形式。结果获得的句柄会自动具备正确的类型(这会在编译期间检查并核实,所以不会出现运行期的开销)。有些时候,我们想告诉其他某些对象创建它某个内部类的一个对象。为达到这个目的,必须在new表达式中提供指向其他外部类对象的一个句柄。代码:com.li.quoteouter除非已拥有外部类的一个对象,否则不可能创建内部类的一个对象。这是由于内部类的对象已同创建它的外部类的对象“默默”地连接到一起。然而,如果生成一个static内部类,就不需要指向外部类对象的一个句柄。引用外部类对象由于内部

4、类构建器必须同封装类对象的一个句柄联系到一起,所以从一个内部类继承的时候,情况会稍微变得有些复杂。这儿的问题是封装类的“秘密”句柄必须获得初始化,而且在衍生类中不再有一个默认的对象可以连接。解决这个问题的办法是采用一种特殊的语法,明确建立这种关联。代码:com.li.extendsinner从中可以看到,NickName只对内部类进行了扩展,没有扩展外部类。但在需要创建一个构建器的时候,默认对象已经没有意义,我们不能只是传递封装对象的一个句柄。此外,必须在构建器中采用下述语法:enclosingClassHandle.super();它提供了必要的句柄,以便程序正确编译。内部类的

5、继承“覆盖”一个内部类——好象它是外部类的另一个方法——这一概念实际不能做任何事情。代码:com.li.coverinner默认构建器是由编译器自动合成的,而且会调用基础类的默认构建器。大家或许会认为由于准备创建一个Lady,所以会使用Name的“被覆盖”版本。但实际情况并非如此。输出如下:newGirl()Girl.Name()这个例子简单地揭示出当我们从外部类继承的时候,没有任何额外的内部类继续下去。内部类能被覆盖吗?由于每个类都会生成一个.class文件,所以内部类也必须生成相应的.class文件,用来容纳与它们的Class对象有关的信息。这些文件或类的名字遵守一种严格的形

6、式:先是封装类的名字,再跟随一个$,再跟随内部类的名字。例如,由Girl.java创建的.class文件包括:Girl.class,Girl$Age.class,Girl$Name.class。如果内部类是匿名的,那么编译器会简单地生成数字,把它们作为内部类标识符使用。若内部类嵌套于其他内部类中,则它们的名字简单地追加在一个$以及外部类标识符的后面。这种生成内部名称的方法除了非常简单和直观以外,也非常“健壮”,可适应大多数场合的要求。由于它是Java的标准命名机制,所以产生的文件会自动具备“与平台无关”的能力(注意Java编译器会根据情况改变内部类,使其在不同的平台中能正常工作)

7、。内部类的标识符设计用来控制温室(GreenHouse)功能。每个行动都是完全不同的:控制灯光、供水以及温度自动调节的开与关,控制响铃,以及重新启动系统。但控制框架的设计宗旨是将不同的代码方便地隔离开。对每种类型的行动,都要继承一个新的Event内部类,并在action()内编写相应的控制代码。代码:com.li.control内部类控制框架Thanks

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。