- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向对的象特性
第5章 面向对象的特性 Object Oriented Techniques 目 录 5.1 面向对象特性 5.2 抽象类 5.3 接口 5.4 内部类 5.5 异常类 5.6 泛型类 5.1 面向对象特性 5.1 面向对象特性 1.封装性 封装(Encapsulation)—— First Principle of OO 通过对象的封装,实现了模块化 通过对类和类的成员施以一定的访问权限,实现了信息隐藏 java中的限定词 1.封装性 未封装的全局变量 Box . x 可以造成系统中所有类之间产生紧耦合 系统可维护性差 1.封装性 Java中实例变量最低限度的封装 没有封装x的身份 类的public成员构成类的输出API 1.封装性 隐藏实例成员变量 添加存取方法 解除对实例成员的耦合 x从输出API变成了类的内部实现 1.封装性 x成为Box的内部实现 不再影响Client 防止修改 1.封装性 可维护性、冗余性 对于易发生变化的成员,在内部访问时使用存取方法 1.封装性 不可变更类 – 封装性、安全性的考虑 不可变更类的实例一旦被创建,其状态就不会发生变化 String、基本数据类型的类包装器 特点: “private”成员属性 成员没有setter方法 “final”class “final”成员属性 通常不提供可变成员的getter方法 通常不在构造函数中引用外部可变对象 线程安全 实例可以被重用(对象池) 享元模式( flyweight design pattern ) 1.封装性 防御拷贝(defensive copy) 1.封装性 防御拷贝(defensive copy) 封装性 – 总结 最大限度的降低数据的可见性 谨慎设计和输出公共API 耦合性 可维护性 可扩展性 封装性 – 总结 公共的类构成了包(一个子系统)的外观 ( fa?ade ) 当一个类只被一个其他类访问的时候,可以作为该类的内部类 ( innner class) 不能因为测试类的正确性,而提高其可见性 如果包中一个类频繁访问另一个类的成员变量时,应考虑重构设计 封装性 – 总结 类不应该直接暴露成员变量(fields) 反例:java.awt.Point,java.awt.Dimension 类的成员变量应尽可能设置为私有的(private) “static final”可以设置为公有,但必须为简单类型或不可变的引用类型 “protected”会引起成员变为API的一部分 根据类是否为可变类型,来提供相应的getter和setter 对于可变的引用成员变量,在构造函数和getter方法中使用防御拷贝 在类的内部对不稳定的属性,使用getter和setter访问 2.继承性(Inheritance) 实现代码复用 组合(has-a) 继承(is-a) 把一些类的共性再抽取出来,放到一个类中,称为父类 具有特殊属性的新类继承父类的状态和行为,称为子类 子类继承了父类的属性和方法(不包括构造方法),同时也可以拥有自己的属性和方法 继承具有传递性 父类可以是Java类库中的类,也可以是自己编写的类 Java中每个类只能有一个直接父类,称为单继承 2.继承性(Inheritance) 2.继承性(Inheritance) 2.继承性(Inheritance) 2.继承性(Inheritance) 2.继承性(Inheritance) 2.继承性(Inheritance) 创建子类class SubClass extends SuperClass { … } java中所有的类都是通过直接或间接地继承java.lang.Object类得到的,如果一个类没使用extends,该类被系统默认为是Object类的子类。 java不支持多重继承。 子类不能继承父类中权限为private的成员变量和方法。 2.继承性 子类继承父类的变量和方法可以被子类自身定义的方法所访问 子类和父类在同一包中,子类继承父类中不是private的成员变量和方法 子类和父类不在同一包中,子类继承父类中的protected, public成员变量和方法 继承的成员变量及方法的访问权限保持不变 下面我们看一个例子。 程序的运行结果见下图 5.3 子类对象的构造过程 当用子类的构造方法创建一个子类的对象时,子类总是先调用父类的构造方法,如果子类的构造方法中没有显式指明使用哪一个构造方法,子类调用父类不带参数的构造方法。 (1)将子类中声明的成员变量做为子类对象的成员变量 (2)父类的成员变量也都分配了内存空间,但只将其中一部分(继承的那部分)做为子类对象的成员变量。 5.4 成员的覆盖(隐藏) 子类拥有与父类
文档评论(0)