Java程序设计中各种“内部类”的比较与应用探析.docVIP

Java程序设计中各种“内部类”的比较与应用探析.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java程序设计中各种“内部类”的比较与应用探析.doc

Java程序设计中各种“内部类”的比较与应用探析 【摘 要】在一个类的内部定义的类称为内部类,内部类可分为实例内部类、静态内部类、局部内部类等。本文就内部类的应用给出类相应的分析。 【关键词】内部类;实例内部类;静态内部类;局部内部类 在Java语言中,在一个类的内部定义的类称为内部类,内部类允许把一些逻辑相关的类组织在一起,并且控制内部类代码的可视性。内部类按作用域可以分为成员内部类和局部内部类,其中成员内部类又可以分为实例内部类和静态内部类,下面就三者的比较与应用进行分析。 1 实例内部类、静态内部类和局部内部类的比较分析 1.1 主要特征 实例内部类的实例引用特定的外部类的实例;静态内部类的实例不与外部类的任何实例关联;局部内部类的可见范围是所在的方法。 1.2 可用的修饰符 实例内部类可是使用访问控制修饰符(public、protected、private),abstract,final;静态内部类可以使用访问控制修饰符,static,abstract,final;局部内部类只能使用abstract或final来修饰。 1.3 可用访问外部类的哪些成员 实例内部类可用直接访问外部类的所有成员;静态内部类只能直接访问外部类的静态成员;局部内部类可以直接访问外部类的所有成员,并且能访问所在方法的final类型的变量和参数。 1.4 拥有成员的类型 实例内部类只能拥有实例成员;静态内部类可以拥有静态成员和实例成员;局部内部类只能拥有实例成员。 1.5 外部类如何访问内部类的成员 外部类必须通过实例内部类的实例来访问;外部类中的静态成员可以通过其静态内部类的完整类名来访问;外部类必须通过局部内部类的实例来访问。 2 内部类的应用分析 2.1 封装类型 面向对象的核心思想之一是封装,把所有不希望对外公开的实现细节封装起来。顶层类只能处于public和默认访问级别,而内部类可以处于public、protected、private和默认4种访问级别。此外,如果一个内部类仅仅为特定的方法提供服务,那么可以把这个内部类定义在方法之内。由此可见内部类是一种封装类型的有效手段。以下private类型的InnerTool内部类实现了公共的Tool接口。 public interface Tool public int add(int a,int b); public class Outer private class InnerTool implements Tool public int add(int a,int b) return a+b; public Tool getTool() return new InnerTool(); 在客户类中不能访问Outer.InnerTool类,但可以通过Outer类的getTool()方法获得InnerTool的实例,由此可见,此私有内部类可以用来封装类型。 2.2 直接访问外部类的成员 内部类的一个特点是能够访问外部类的各种访问级别的成员。假定有类A和类B,类B的reset方法负责重新设置类A的实例变量count的值,一种实现方法是把类A和类B都定义为外部类,为了使类B能够访问类A的count属性,类A必须提供getCount()和setCount()方法,此外还建立了类B到类A的关联关系。假如应用需求要求类A的count属性不允许白除了来类B之外的其他类读取或设置,那么以上的实现方式就不能满足这一需要。在这种情况下,把类B定义为内部类就可以解决这一问题,而且会使代码更加简捷。 class A private int count; public int add() return ++count; class B public void reset() if(count 0) count 1;else count -1; 当类B作为类A的实例内部类时,可以直接访问类A的count属性。Java虚拟机会保证类B的实例持有类A的实例的引用,因此无须显式地建立类B与类A的关联。 2.3 回调(CallBack): 假设下面的Teachable接口和Programmer基类,它们都提供了一个work方法,但方法的功能是不一样的。 interface Teachable void work(); public class Programmer private String name; //此处省略类的构造方法和name属性的setter和getter方法 … public void work() System.out.println(name+”在写程序代码…”); 假设现有一个人即是程序员,也是教师。也就是说需要定义一个特殊的类,该类既要实现Teachable接口,也要继承Programmer类

文档评论(0)

lnainai_sj + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档