快速业务通道

浅析Java语言中的内部类 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
类Content的方法value()计算价 值时把它乘上。我们发现,value()可以访问valueRate,这也是内部类的第二个 好处——一个内部类对象可以访问创建它的外部类对象的内容,甚至包括私有变 量!这是一个非常有用的特性,为我们在设计时提供了更多的思路和捷径。要想 实现这个功能,内部类对象就必须有指向外部类对象的引用。Java编译器在创建 内部类对象时,隐式的把其外部类对象的引用也传了进去并一直保存着。这样就 使得内部类对象始终可以访问其外部类对象,同时这也是为什么在外部类作用范 围之外向要创建内部类对象必须先创建其外部类对象的原因。

有人会问,如果内部类里的一个成员变量与外部类的一个成员变量同名,也 即外部类的同名成员变量被屏蔽了,怎么办?没事,Java里用如下格式表达外部 类的引用:

outerClass.this

有了它,我们就不怕这种屏蔽的情况了。

静态内部类

和普通的类一样,内部类也可以有静态的。不过和非静态内部类相比,区别 就在于静态内部类没有了指向外部的引用。这实际上和C++中的嵌套类很相像了 ,Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用这一点上, 当然从设计的角度以及以它一些细节来讲还有区别。

除此之外,在任何非静态内部类中,都不能有静态数据,静态方法或者又一 个静态内部类(内部类的嵌套可以不止一层)。不过静态内部类中却可以拥有这 一切。这也算是两者的第二个区别吧。

局部内部类

是的,Java内部类也可以是局部的,它可以定义在一个方法甚至一个代码块 之内。

public class Goods1 {   public Destination dest(String s) {    class GDestination implements Destination {     private String label;     private GDestination(String whereTo) {      label = whereTo;     }     public String readLabel() { return label; }    }    return new GDestination(s);   }   public static void main(String[] args) {    Goods1 g= new Goods1();    Destination d = g.dest("Beijing");   } }

浅析Java语言中的内部类(3)

时间:2010-12-03

上面就是这样一个例子。在方法dest中我们定义了一个内部类,最后由这个 方法返回这个内部类的对象。如果我们在用一个内部类的时候仅需要创建它的一 个对象并创给外部,就可以这样做。当然,定义在方法中的内部类可以使设计多 样化,用途绝不仅仅在这一点。

下面有一个更怪的例子:

public class Goods2{   private void internalTracking(boolean b) {    if(b) {     class TrackingSlip {      private String id;      TrackingSlip(String s) {       id = s;      }      String getSlip() { return id; }     }     TrackingSlip ts = new TrackingSlip("slip");     String s = ts.getSlip();    }   }   public void track() { internalTracking(true); }   public static void main(String[] args) {    Goods2 g= new Goods2();    g.track();   } }

你不能在if之外创建这个内部类的对象,因为这已经超出了它的作用域。不 过在编译的时候,内部类TrackingSlip和其他类一样同时被编译,只不过它由它 自己的作用域,超出了这个范围就无效,除此之外它和其他内部类并没有区别。

匿名内部类

java的匿名内部类的语法规则看上去有些古怪,不过如同匿名数组一样,当 你只需要创建一个类的对象而且用不上它的名字时,使用内部类可以使代码看上 去简洁清楚。它的语法规则是这样的:

new interfacename(){......}; 或 new superclassname(){......};

下面接着前面继续举例子:

public c

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号