编程思想 -- 第7章 -- 复用类

复用类

复用代码是java众多引人注目的功能之一,但要想成为极具革命性的语言,仅仅能够赋值代码并对之加以改变是不够的,它还必须能够做更多的事情。


一、组合语法
    只需将对象一用置于新类中 -- 组合技术的使用。对于非基本类型的对象,必须将其引用置于新的类中。
    编译器并不是简单的为每一个引用都创建默认对象,因为在很多情况下会增加不必要的负担。如果想初始化这些引用,可以在代码中的下列位置进行:

1,在定义对象的地方。这意味着它们总是能够在构造器被调用之前被初始化。2,在类的构造器中。3,就在正要使用这些对象前,这种方式被称为惰性初始化,在生成对象不值得及不必每次都生成对象的情况下,这种方式可以减少额外的负担。4,使用实例初始化。
    
二、继承语法
    继承是所有OOP语言和java语言不可缺少的组成部分。当创建一个类时,总是在继承,因此,除非已明确指出要从其它类中继承,否则就是在隐式地从 java的标准根类Object进行继承。
    java用super关键字表示超类的意思,当前类是从超类继承而来,避免直接调用父类方法会产生的递归现象。
    基类和导出类的区别在于:导出类来自于外部,而基类的子对象被包装在导出类对象内部。
    对基类子对象的正确初始化至关重要,且仅有一种方法保证这一点:在构造器中调用基类构造器来执行初始化,而基类构造器具有执行基类初始化所需要的所有知识和能力。
    带参构造器必须用关键字super显示编写调用基类构造器的语句。
    
三、代理
    java并没有提供对它的直接支持,这是继承与组合之间的中庸之道,因为我们讲一个成员对象置于所要构造的类中(就像组合),但与此同时,我们在新类中暴露了该成员对象的所有方法(就像继承)。
    
四、结合使用组合和继承
    同时使用组合和继承是很常见的事。虽然编译器强制你去初始化基类,并且要求你要在构造器起始处就这么做,但是它并不监督你必须将成员对象也初始化。
    java中没有C++中析构函数的概念。析构函数是一种在对象被销毁时可以被自动调用的函数。显式的清理一些东西,必须将这一清理动作置于finally字句中,以预防异常的出现。
    如果java的基类拥有某个已经被多次重载的方法名称,那么在导出类中重新定义该方法名称并不会屏蔽其在基类中的任何版本。
    override代表覆写某个方法,它并不是关键字,但可以当做关键字使用。
    
五、在组合与继承之间选择
    组合和继承都允许在新的类中放置子对象,组合是显式地这样做,而继承是隐式的做。
    组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形。即在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是为新类所定义的接口,而非所嵌入对象的接口。
    在继承的时候,使用某个现有的类,并开发一个它的特殊版本,通常,这意味着你在使用一个通用类,并为了额某种特殊需要而将其特殊化。
    
六、protected关键字
    关键字protected指明就类用户而言,这是private的,但对于任务号继承于此类的导出类或其他任何位于同一个包内的类来说,它却是可以访问的。
    尽管可以创建protected域,但是最好的方式还是将域保持为private,你应当一直保留更改底层的权利,然后通过protected的方法来控制类的继承者的访问权限。
    
七、向上转型
    “为新的类提供方法”并不是继承技术中最重要的方面,其最重要的方面是用来表现新类和基类之间的关系。这种关系可以用“新类是现有类的一种类型”这句话加以概括。
    由导出类转型成基类,在继承图上是向上移动,因此一般称为向上转型。由于向上转型是从一个较专用类型向较通用类型转换,所以总是安全的。也就是说,导出类是基类的一个超集。它可能比基类含有更多的方法,但它必须至少具备基类中所含有的方法,在向上转型的过程中,类接口中唯一可能发生的事情是丢失方法,而不是获取它们。
    是否需要向上转型是判断你采取组合与继承的最具说服力的理由。
    
八、final关键字
    java关键字final的含义通常它指的是:“这是无法改变的”。不做改变的可能出于两种理由:设计或效率
    final数据:1,一个永不改变的编译时常量。2,一个在运行时被初始化的值,而你不希望它被改变。在java中,这类常量必须是基本数据类型,并且以关键字final表示。
    在对这个常量进行定义的时候,必须对其进行赋值。一个既是static又是final的域只占据一段不能改变的存储空间。
    final方法:1,锁定方法,以防止任何继承类修改它的含义。2,效率。
    类中所有的private方法都隐式地制定为是final的,由于无法取用private方法,所以就无法覆盖它。
    final类:表明你不打算继承该类,并且不允许别人这样做。出于某种考虑,对该类的设计永不需要做任何变动,或者出于安全的考虑,你不希望它有子类。
    
九、初始化及类的加载
    java中所有的事物都是对象,每个类的编译代码都存在于它自己的独立文件中,该文件只在需要使用程序代码时才会被加载。可以说“类的代码在初次使用时才加载”,但是当访问static域或static方法时,也会发生加载,初次使用之处也是static初始化发生之处,定义为static的东西只会被初始化一次。
    继承与初始化:类加载器从入口main或者其它开始进行加载,遇到什么类就加载什么类,向上找基类,向下找导出类等等,加载完毕后,创建对象。然后基本类型被设为默认值,引用对象被设定为null,然后类的构造器被自动调用,构造器完成后,实例变量按次序被初始化,最后,构造器的其余部分被执行。
    
十、总结
    继承和组合都能从现有类型生成新类型。组合一般是将现有类型作为新类型底层实现的一部分来加以复用,而继承复用的是接口。
    使用继承时,由于导出类具有基类接口,因此它可以向上转型至基类,这对多态来讲至关重要。
    程序开发是一个增量过程,将项目视作一种有机的,进化着的生命体而去培养,会获得更多的成功和更迅速的回馈。继承和组合正是在面向对象程序设计中使得你可以执行这种实现的最基本的两个工具
    
    
        
    
    
    
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android C 高级编程是指在Android开发中使用C语言进行高级编程的技术。而使用NDK(Native Development Kit)可以使开发者在Android应用中使用C/C++等本地语言进行编程。 NDK是一个工具集,它允许开发者在Android应用中嵌入本地代码,并且提供了一系列的开发工具和库,以便开发者能够在Android应用中使用C/C++进行高级编程。使用NDK可以提供更高的性能和更低的内存占用,适用于需要处理大量数据和高性能计算的应用场景。 在使用NDK进行Android C高级编程时,可以使用PDF(Portable Document Format)作为文档格式,以便对代码和项目进行更好的管理和文档化。在NDK的开发过程中,可以使用PDF文档记录关键的设计思路、代码逻辑、接口定义等信息,以方便团队协作和后续的维护。 使用NDK进行Android C高级编程的步骤大致如下: 1. 准备开发环境:安装NDK并配置好开发环境,包括设置NDK的路径和编译器等。 2. 创建新项目:使用Android Studio创建一个新的Android项目,并在项目中引入NDK的支持。 3. 编写C代码:使用C/C++语言编写需要调用的函数、算法或者数据结构等代码,并将其保存在适当的目录下。 4. 编写JNI接口:在生成的Java代码中,使用JNI(Java Native Interface)定义对应C代码的接口,以便在Java层调用C代码。 5. 编译和构建:使用NDK的工具集进行编译和构建,将C代码编译成适合Android平台使用的库文件(.so文件)。 6. 在Java代码中调用C代码:在需要调用C代码的地方,使用JNI接口调用对应的C函数,以实现和C代码的交互和调用。 使用PDF文档进行文档化可以帮助开发者更好地组织和管理代码、接口和设计文档等,方便后续的代码维护和项目协作。同时,也可以作为项目的参考文档,方便其他开发人员了解和使用项目。 ### 回答2: Android C 高级编程是针对使用NDK(Native Development Kit)的一种高级编程技术。NDK是Android开发工具包中的一个工具,允许开发者使用C、C++或其他本地编程语言编写Android应用程序的部分或全部代码。 使用NDK进行Android C高级编程有许多优点。首先,NDK提供了更高的性能和更好的控制权,特别是在处理图形、音频和计算密集型任务时。通过使用本地编程语言,开发者能够更好地利用底层系统资源,提高应用程序的执行效率和速度。 其次,NDK还提供了对现有C和C++库的支持。这意味着开发者可以使用许多已经存在的库和功能来加快开发进程。无需重新编写现有的代码,直接使用NDK与这些库进行集成即可。 在使用NDK进行Android C高级编程时,一种常见的用途是开发游戏。使用C或C++编写游戏代码可以获得更好的性能和更低的延迟,这对于游戏的流畅运行至关重要。 此外,开发者还可以使用NDK为现有的Java应用程序添加本地本地扩展。这样可以通过使用C或C++编写某些关键组件,以改进应用程序的性能或添加新的功能。 总的来说,通过使用NDK进行Android C高级编程,开发者可以获得更高的性能、更好的控制权和更好的资源利用。无论是开发游戏还是优化应用程序,使用NDK都是提高性能和扩展功能的好方法。通过阅读相关的PDF文档,开发者可以更深入地了解如何使用NDK进行Android C高级编程。 ### 回答3: Android NDK (Native Development Kit) 是一个用于开发 Android 应用程序的工具集,它使开发者能够使用 C 或 C++ 编写原生代码,并将其与 Java 编写的 Android 应用程序一起使用。使用 NDK 可以达到增加性能、复用现有的 C/C++ 代码以及访问底层硬件等目的。 在 Android C 高级编程中,使用 NDK 商用 PDF 库可以实现在 Android 应用程序中处理 PDF 文件的功能。PDF 文件是一种常见的电子文档格式,使用 PDF 库可以读取、编辑和生成 PDF 文件。 使用 NDK 进行 PDF 处理的一般步骤如下: 1. 集成 PDF 库:首先,需要将商用的 PDF 库 (.so 文件) 集成到 Android 项目中。可以通过在 Android.mk 文件中添加相关配置,确保 .so 文件正确地被编译和链接到应用程序中。 2. 创建 JNI 接口:为了在 Java 层与 C/C++ 层之间进行通信,需要创建 JNI (Java Native Interface) 接口。可以在创建 JNI 方法时使用 JNAerator 或者手动编写 JNI 代码,以便在 Java 层调用 C/C++ 的功能。 3. 对 PDF 文件进行处理:在 C/C++ 层,可以使用 PDF 库提供的功能来处理 PDF 文件。例如,可以使用库提供的函数来解析、渲染、添加标注、提取内容等。 4. 将数据返回给 Java 层:在 C/C++ 层处理完之后,可以通过 JNI 接口将处理后的数据返回给 Java 层。这样就可以在 Android 应用程序中显示或者存储处理后的 PDF 文件。 需要注意的是,在使用商用 PDF 库时,需要遵循相关的许可协议,并确保在开发和分发过程中合法使用该库。 总之,通过使用 NDK 和商用 PDF 库,可以使 Android 应用程序具有处理 PDF 文件的高级编程能力。同时,开发者需要具备 C/C++ 编程和 JNI 接口的使用经验,以便顺利地进行开发工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值