08.面向对象程序设计进阶(下)a.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
08.面向对象程序设计进阶(下)a

* * * * * * * * * * * * * 工厂模式的实现: 工厂模式根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这组类有一个公共的抽象父类或接口并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。 首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法,然后需要定义一个工厂类,工厂类可以根据条件生成不同子类的实例。得到实例后,可以调用基类的方法而不必考虑到底返回的是哪个子类的实例。 设计模式 命令模式 某个方法需要完成某个功能,完成这个功能的大部分步骤已经确定了,但是有少量步骤无法确定,必须等到执行方法时才能确定。 例如:需要遍历一个数组,但是遍历完后做什么还不确定,我们必须把处理行为作为参数传进去。 实现方法和行为相分离,使程序更加灵活。 设计模式 对于简单类型数据,Java对它们进行了封装,使它们都有相应的封装类 封装类 简单数据类型 封装类 boolean Boolean byte Byte short Short int Integer long Long char Character float Float double Double public class WrapperClass { public static void main(String[] args) { Integer i = new Integer(10); Integer j = new Integer(10); System.out.println(i==j); } } 封装类的例子 定义在类里面的类。 成员内部类 静态内部类 局部内部类 匿名内部类 内部类 成员内部类 依赖于外部类存在 当一个类中的程序代码要用到另外一个类的实例对象,而另外一个类中的程序代码又要访问第一个类中的成员,将另外一个类做为第一个类的内部类,程序代码就要容易编写的多。 1、可以访问外部类中所有的成员变量,所有的成员方法 2、可以有自己的成员变量;(非静态) 3、可以有自己的方法.(非静态) 4、不能有自己的静态属性和静态方法; 何时选用内部类: 假如更多是内部外部类相互调用, 很少涉及第3方调用。 选择成员内部类 内部类 为什么外部类不能访问成员内部类的实例属性? 答:因为当成员内部类对象存在时,外部类肯定存在,而当外部类对象存在时,成员内部类的对象不一定存在。 问题 静态内部类: 1、只能访问外部类中静态的属性和方法。 2、如果创建对象不需要外部类的对象就可以创建; 3、可以直接调用静态内部类中的静态方法. [外部类名].[内部类名].[方法名] 4、也可以有非静态的属性和方法;但是在静态方法中不能调用非静态的属性; 如果需要使用非静态的方法或属性需要对象进行调用; 何时选择静态内部类: 假如更多只是面向第3方客户,而内部外部类相互调用机会较少选择静态内部类。 内部类 为什么静态内部类实例方法也不能访问外部类的实例属性呢? 答:因为静态内部类是和外部类相关的,而不是和外部类的对象相关的。也就是说,当静态内部类的对象存在时,也许外部类的对象并不存在,静态内部类的对象里只有外部类的引用,而没有外部类对象的引用。如果允许访问会出现错误 问题 既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 答:不可以!因为内部类的类名不再是简单地由内部类的类名组成,它实际上还把外部类名作为一个命名空间,作为内部类类名的限制。因此子类中内部类和父类中的内部类不可能完全同名,即使二者所包含的内部类的类名相同,但因为它们所处的外部类空间不同,所以它们不可能是同一个类,也就不可能重写。 问题 局部内部类: 在一个方法中声明的类。 局部内部类只在定义它的代码段中可见,不能在它所属代码段之外的代码中使用;因此也就没有public/private/default权限修饰符(无意义) 局部内部类可以访问外部类的实例变量,只能访问其所属代码段中(方法中)的final局部变量(?),但不能访问方法中的局部变量。 在类外不可直接生成局部内部类(保证局部内部类对外是不可见的)。 要想使用局部内部类时需要生成对象,对象调用方法,在方法中才能调用其局部内部类。

文档评论(0)

f8r9t5c + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档