`
hanlsheng
  • 浏览: 24765 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Resuing Classes 类复用(代码复用)

    博客分类:
  • java
阅读更多

Resuing Classes

1.     代码重复使用是java最令人注目的功能之一。代码重用可以很大程度上减少复制代码和改写代码的工作。

2.     代码复用的技巧是:使用已经存在的类但是不改变存在的代码。有两种方法可以达到代码复用的目的:A.通过组合(composition);B. 通过继承(inheritance

3.     组合的语法:新建一个类,其中包含已存在类的引用。

4.     初始化一个引用的4个途径

A.在引用声明时。

B.在构造方法中

C.在引用被即将使用时(懒引用实例化)

D.使用实体初始化(instance initialization

5.     继承在java(所有oop语言)语言中无处不在,只要你创建一个class你就在使用继承,这是因为除非你显式继承其他类,若不然,就隐含继承了java的根类对象Object

6.     当你使用继承时,你是在表明这个新类 类似 被继承的类

7.     当你继承了一个类时,你就获得了这个类所有的成员变量和成员方法。

8.     继承不是简单的复制父类的方法。当你实例化一个子类时,子类对象将包含有一个父类的对象,这个父类的对象跟你用父类创建的一样。

9.     一个重要的问题是,在实例化子类的时候一定要保证父类被正确实例化,方法是在子类的实例方法中调用父类的实例方法。Java中子类隐含调用父类的默认构造函数,如果父类没有默认构造函数,或者子类需要调用父类的有参数构造函数,那么必须在子类的构造函数中显式调用父类的构造函数,通过关键字super。对父类构造函数的调用必须在子类构造函数语句第一句。

10. 除了组合和继承,还有一种关系代理、委托(delegation).java语言再语言级别不是直接支持的。

11.  代理、委托是介于继承和组合之间的一种代码复用的方式,因为你可以在你的代理类中放置一个成员实例对象(像组合),同时你(开放,展示)expose成员实例对象的方法(类似继承)

12. 通常情况下 组合和继承同时使用的。

13. java没有类似C++ 中的析构函数(用来释放资源的),但是java有垃圾回收器,在必要的时刻会释放系统资源,清除垃圾对象。

14. 垃圾回收器执行垃圾回收操作具有不确定性,在大部分情况下保证了正常的资源回收。但是在一些情况下,需要及时的释放资源,这就要保证立刻的执行释放资源操作。如何实现呢?

15. 在实现释放资源方法中,先释放自己占有的资源然后释放父类占有的资源

16. 重载(overload)、覆盖(override):方法同名但是方法签名不同为重载,方法签名相同为覆盖。通过使用@override 可以保证是否真的进行了覆盖操作。

17. 何时使用组合何时使用继承呢? 使用组合只是为了使用成员对象提供的一些功能哦。使用继承是要创造一个比父类更特别的类,一般来说,就是扩展一个通用的类使其更特别。 继承关系是 is-a关系;组合关系是has-a关系。

18. protected 访问级别是子类或者同包类。

19. 继承所提供的最重要的功能不是代码的重用,而是继承建立了一个子类和父类的关系。这个关系就是:子类是父类的一种特殊类型。

20. 再论组合和继承: 在面向对象编程中,最可能的方式是你通过类来封装数据和方法,然后构造类的实例以便使用。你可以使用已经存在的类通过组合构造新类;你也可以使用继承。虽然在面向对象编程中一再强调继承的重要,但是并不意味着在可能使用的地方均使用继承。在组合和继承均可实现的功能的背景下是否选择继承,一个最清楚的方式是判断是否需要将子类向上转型(upcasting)。如果子类需要向上转型就用继承,如果不需要,则选择自己喜欢的方式,要么继承要么组合。

21. final 关键字在不同的情况下,含义是有差别的。但一般来说final总是意味着“不能改变!”阻止改变有两个原因:(a)设计 b)效率。

分享到:
评论

相关推荐

    ios开发纯代码实现autolayout和sizeclasses初探

    综上所述,纯代码实现AutoLayout和Size Classes需要对视图间的约束关系有深入理解,并能灵活运用NSLayoutConstraint类。同时,要熟悉Size Classes的识别和适配,确保应用在各种设备上都能呈现良好的用户体验。通过...

    classes

    14. **类型别名(Type Aliases)**:在类中,可以使用`type`关键字创建类型别名,方便代码的可读性和复用。 在实际编程中,合理设计和使用类成员可以提高代码的可维护性、扩展性和灵活性。通过深入理解和熟练运用...

    反编译打开classes.dex.dex2jar.jar

    本篇文章将深入探讨如何通过`dex2jar`工具对`classes.dex`进行反编译,并使用`jd-gui`来查看反编译后的Java源代码。 首先,我们要了解什么是`dex2jar`。`dex2jar`是一个开源工具,它的主要功能是将`.dex`文件转换为...

    反编译classes.dex工具

    它能将`classes.dex`文件分解为一系列Smali源代码文件,这些文件位于与原始类结构对应的目录结构中。 使用这些工具的流程通常是这样的: 1. 运行`反编译.bat`,它将调用`baksmali.jar`来反编译`classes.dex`文件,...

    CDib类源代码

    6. **完全注释**:描述中提到的“完全注释”意味着源代码包含详尽的注释,这对于理解和学习CDib类的内部工作原理非常有帮助。注释可能解释了类的各个成员函数的作用、参数的意义以及如何使用它们。 7. **MFC集成**...

    Microsoft Foundation Classes and Templates

    通过模板,开发者可以创建通用的代码,避免了为每种数据类型都编写相同功能的代码,提高了代码的复用性和效率。 MFC中的消息映射机制是其独特之处,它将Windows消息与成员函数关联起来,使得消息处理更加直观。...

    AD9 Classes设置

    - **OpenCollector**:集电极开路的引脚,常用于多路复用或开关控制。 - **Passive**:无源型,表示该引脚不提供电源,仅作为信号传输路径。 - **HiZ**(High Impedance):高阻状态的引脚,不参与信号传输,通常...

    BaseClasses

    【BaseClasses】库包含了用于构建DirectShow过滤器的预定义类,这些类简化了开发过程,使开发者无需从头开始编写所有底层代码。例如,`CBaseFilter`是所有DirectShow过滤器的基础,提供了过滤器的基本管理功能;`...

    Classes_rawkgr_discoveryqmg_classes修改_mobileclientkernel_classes

    压缩包中的"Classes"文件很可能包含了这些被修改的类文件,它们可能是Java源代码(.java)或者是编译后的字节码(.class)。开发者需要逐个检查这些文件,理解每个类的功能,然后根据需求进行相应的修改。 在处理这...

    PHP-Framework-Classes-master.zip

    - `TemplateEngine`类可能用于动态生成HTML页面,它允许开发者将业务逻辑与视图分离,提高代码复用性和维护性。 通过研究这些类的源代码,初学者不仅可以学习到PHP的基础知识,还能了解如何组织和设计类,以及如何...

    c++ classes

    面向对象编程中还经常使用模板类,模板类允许参数化类型,使得编写的代码可以适用于多种数据类型,提高了代码的复用性。 在C++编程实践中,类的设计需要考虑很多问题,比如构造函数和析构函数的正确实现、资源的...

    Classes-Template-examples.rar_类模板

    类模板的主要优点是代码复用,因为一个模板可以生成无数个特定类型的类实例,每个实例都有自己的成员函数和数据成员,但共享相同的逻辑结构。 以下是一个简单的类模板示例: ```cpp template class Stack { ...

    前端开源库-get-css-classes

    总的来说,`get-css-classes`是一个实用的前端工具,它简化了从选择器中提取CSS类的过程,提高了代码的效率和可维护性。在前端开发中,善用这样的开源库可以显著提升开发体验和项目的质量。记得在使用任何开源库时,...

    4-classes(类4).pdf

    通过类,我们可以定义复杂的数据结构,通过继承可以实现代码复用和扩展,而访问修饰符则有助于管理类的封装性。这些特性使得TypeScript成为开发大型、复杂应用程序的理想选择,尤其是在需要跨平台运行的场景下,因为...

    netty-transport-classes-epoll-4.1.73.Final-API文档-中文版.zip

    赠送源代码:netty-transport-classes-epoll-4.1.73.Final-sources.jar; 赠送Maven依赖信息文件:netty-transport-classes-epoll-4.1.73.Final.pom; 包含翻译后的API文档:netty-transport-classes-epoll-4.1.73....

    netty-tcnative-classes-2.0.46.Final-API文档-中文版.zip

    赠送源代码:netty-tcnative-classes-2.0.46.Final-sources.jar; 赠送Maven依赖信息文件:netty-tcnative-classes-2.0.46.Final.pom; 包含翻译后的API文档:netty-tcnative-classes-2.0.46.Final-javadoc-API文档-...

    netty-transport-classes-epoll-4.1.74.Final-API文档-中文版.zip

    赠送源代码:netty-transport-classes-epoll-4.1.74.Final-sources.jar; 赠送Maven依赖信息文件:netty-transport-classes-epoll-4.1.74.Final.pom; 包含翻译后的API文档:netty-transport-classes-epoll-4.1.74....

    unity-classes.jar

    在 UnityPlayerActivity 类,存在 mUnityPlayer.quit() 方法,通过退出 unityplayer 来结束 UnityPlayerActivity,会导致整个应用被关闭。查看 unity-classes.jar源码,发现quit()方法会结束整个进程。于是修改jar包...

    java内部类的讲解

    Java的内部类机制是其强大特性之一,它允许类作为另一个类的成员存在,从而增强了代码的封装性和复用性。根据定义和作用域的不同,Java内部类主要分为四类: 1. **嵌套顶级类(Nested Top-Level Classes)**:这种...

    个人代码库CodeManage

    1. **代码分类管理**:用户可以根据不同的编程语言、功能模块或项目进行代码分类,方便查找和复用。 2. **搜索功能**:通过关键词或元数据进行快速搜索,找到所需代码片段。 3. **版本控制**:虽然不是专业的版本...

Global site tag (gtag.js) - Google Analytics