java的匿名内部类 - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-26
java的匿名内部类时间:2007-05-28 yycnet.yeah.net yyc译 至此,我们已基本理解了内部类的典型用途。对那些涉及内部类的代码,通常表达的都是“单纯”的内部类,非常简单,且极易理解。然而,内部类的设计非常全面,不可避免地会遇到它们的其他大量用法——假若我们在一个方法甚至一个任意的作用域内创建内部类。有两方面的原因促使我们这样做:(1) 正如前面展示的那样,我们准备实现某种形式的接口,使自己能创建和返回一个句柄。(2) 要解决一个复杂的问题,并希望创建一个类,用来辅助自己的程序方案。同时不愿意把它公开。在下面这个例子里,将修改前面的代码,以便使用:(1) 在一个方法内定义的类(2) 在方法的一个作用域内定义的类(3) 一个匿名类,用于实现一个接口(4) 一个匿名类,用于扩展拥有非默认构建器的一个类(5) 一个匿名类,用于执行字段初始化(6) 一个匿名类,通过实例初始化进行构建(匿名内部类不可拥有构建器)所有这些都在innerscopes包内发生。首先,来自前述代码的通用接口会在它们自己的文件里获得定义,使它们能在所有的例子里使用:由于我们已认为Contents可能是一个抽象类,所以可采取下面这种更自然的形式,就象一个接口那样://: Destination.java package c07.innerscopes; interface Destination { String readLabel(); } ///:~ 尽管是含有具体实施细节的一个普通类,但Wrapping也作为它所有衍生类的一个通用“接口”使用://: Contents.java package c07.innerscopes; interface Contents { int value(); } ///:~ 在上面的代码中,我们注意到Wrapping有一个要求使用自变量的构建器,这就使情况变得更加有趣了。第一个例子展示了如何在一个方法的作用域(而不是另一个类的作用域)中创建一个完整的类://: Wrapping.java package c07.innerscopes; public class Wrapping { private int i; public Wrapping(int x) { i = x; } public int value() { return i; } } ///:~ PDestination类属于dest()的一部分,而不是Parcel4的一部分(同时注意可为相同目录内每个类内部的一个内部类使用类标识符PDestination,这样做不会发生命名的冲突)。因此,PDestination不可从dest()的外部访问。请注意在返回语句中发生的上溯造型——除了指向基础类Destination的一个句柄之外,没有任何东西超出dest()的边界之外。当然,不能由于类PDestination的名字置于dest()内部,就认为在dest()返回之后PDestination不是一个有效的对象。下面这个例子展示了如何在任意作用域内嵌套一个内部类://: Parcel4.java // Nesting a class within a method package c07.innerscopes; public class Parcel4 { public Destination dest(String s) { class PDestination implements Destination { private String label; private PDestination(String whereTo) { label = whereTo; } public String readLabel() { return label; } } return new PDestination(s); } public static void main(String[] args) { Parcel4 p = new Parcel4(); Destination d = p.dest("Tanzania"); } } ///:~ //: Parcel5.java // Nesting a class within a scope package c07.innerscopes; public class Parcel5 { private void internalTracking(boolean b) { if(b) { class TrackingSlip { private String id; TrackingSlip(String s) { id = s; } String getSlip() { return id; } } TrackingSlip ts = new Tracki |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: java继承和finalize() - 编程入门网下一篇: 数组 - 编程入门网
关于java的匿名内部类 - 编程入门网的所有评论