浅析Java语言中的内部类 - 编程入门网
类Content的方法value()计算价 值时把它乘上。我们发现,value()可以访问valueRate,这也是内部类的第二个 好处——一个内部类对象可以访问创建它的外部类对象的内容,甚至包括私有变 量!这是一个非常有用的特性,为我们在设计时提供了更多的思路和捷径。要想 实现这个功能,内部类对象就必须有指向外部类对象的引用。Java编译器在创建 内部类对象时,隐式的把其外部类对象的引用也传了进去并一直保存着。这样就 使得内部类对象始终可以访问其外部类对象,同时这也是为什么在外部类作用范 围之外向要创建内部类对象必须先创建其外部类对象的原因。
有人会问,如果内部类里的一个成员变量与外部类的一个成员变量同名,也 即外部类的同名成员变量被屏蔽了,怎么办?没事,Java里用如下格式表达外部 类的引用: outerClass.this 有了它,我们就不怕这种屏蔽的情况了。 静态内部类 和普通的类一样,内部类也可以有静态的。不过和非静态内部类相比,区别 就在于静态内部类没有了指向外部的引用。这实际上和C++中的嵌套类很相像了 ,Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用这一点上, 当然从设计的角度以及以它一些细节来讲还有区别。 除此之外,在任何非静态内部类中,都不能有静态数据,静态方法或者又一 个静态内部类(内部类的嵌套可以不止一层)。不过静态内部类中却可以拥有这 一切。这也算是两者的第二个区别吧。 局部内部类 是的,Java内部类也可以是局部的,它可以定义在一个方法甚至一个代码块 之内。
浅析Java语言中的内部类(3)时间:2010-12-03上面就是这样一个例子。在方法dest中我们定义了一个内部类,最后由这个 方法返回这个内部类的对象。如果我们在用一个内部类的时候仅需要创建它的一 个对象并创给外部,就可以这样做。当然,定义在方法中的内部类可以使设计多 样化,用途绝不仅仅在这一点。 下面有一个更怪的例子:
你不能在if之外创建这个内部类的对象,因为这已经超出了它的作用域。不 过在编译的时候,内部类TrackingSlip和其他类一样同时被编译,只不过它由它 自己的作用域,超出了这个范围就无效,除此之外它和其他内部类并没有区别。 匿名内部类 java的匿名内部类的语法规则看上去有些古怪,不过如同匿名数组一样,当 你只需要创建一个类的对象而且用不上它的名字时,使用内部类可以使代码看上 去简洁清楚。它的语法规则是这样的: new interfacename(){......}; 或 new superclassname(){......}; 下面接着前面继续举例子:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |