2019独角兽企业重金招聘Python工程师标准>>>

1、复用类的两种方法

(1)只需在新的类中产生现有类的对象。由于新的类是由现有类的对象所组成,所以这种方法称为组合。该方法只是复用了现有程序代码的功能,而非它的形式。

(2)第二种方法则更细致一些,它按照现有类的类型来创建新类。无需改变现有类的形式,采用现有类的形式并在其中添加新代码。

7.1组合语法

1、组合技术:只需将对象引用置于新类中即可。对于非基本类型的对象,必须将其引用置于新的类中,但可以直接定义基本类型数据。

2、每一个非基本类型的对象都有一个toString()方法,而且当编译器需要一个String而你只有一个对象时,该方法便会被调用,可以重写toString()。

3、如果想初始化引用,可以在代码中的下列位置进行

(1)在定义对象的地方。这意味着它们总是能在构造被调用之前被初始化。

(2)在类的构造器中。

(3)就在正要使用这些对象之前,这种方式为惰性初始化。

(4)使用实例化初始化。

7.2继承语法

1、除非已明确指出要从其他类中继承,否则就是隐式地从java的标准根类Object进行继承。

2、即使是一个程序中含有多个类,也只有命令行所调用的那个类的mian()方法会被调用。即使不是public类,也可以执行里面的面方法。

3、为了继承,一般的规则是将所有的数据成员都指定为private,将所有的方法指定为public。

4、在子类的方法中,不能直接调用基类继承而来的方法,因为这样做会产生递归,为解决此问题,java用super关键字表示超类的意思,当前类就是从超类继承来得。

7.2.1初始化基类

1、当创建一个到处类的对象时,该对象包含了一个基类的子对象。这个子对象与你用基类直接创建的对象是一样的。二者的区别在于,后者来自外部,而基类的子对象被包装在导出类对象内部。

2、对基类子对象初始化:在构造器中调用基类构造器来执行初始化,而基类构造器具有执行基类初始化所需要的所有知识和能力。java会自动在到处类的构造器中插入基类构造器的调用。

3、构建过程是从基类“向外”扩散的,所以基类再导出类构造器可以访问它之前,就已经完成了初始化。

4、如果没有默认的基类构造器,或者想调用一个带参数的基类构造器,就必须用关键字super显示地编写调用基类构造器的语句,并且配以适当的参数列表。

5抵用基类构造器必须是你在导出类构造器中要做的第一件事。

7.3代理

1、这是继承和组合之间的中庸之道,因为我们将一个成员对象置于所要构造的类中(就像组合),但与此同时我们在心累中暴露了该成员对象的所有方法(就像继承)

2、我们使用代理拥有更多的控制力,因为我们可以选择只提供在成员对象中的方法的某个子集。

7.4结合使用组合和继承

1、虽然编译器强制你去初始化基类,并且要求你在构造器起始处就要这么做,但是它并不监督你必须将成员对象也初始化,因此在这一点上必须时刻注意。

7.4.1确保正确清理

1、执行类的所有特定的清理动作,其顺序同生成顺序想法

7.4.2名称屏蔽

1、当想要覆写某个方法时,可以选择加@Override注解,在你不留心重载而并非覆写了该方法时,编译器就会生成一条错误信息。

7.5在组合和继承之间选择

1、组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形。

2、在继承的时候,使用现有类。这意味着你再使用一个通用类,并为了某种特殊需要而将其特殊化。

7.6protected关键字

1、监管可以创建protected域,但是最好的方式还是将域保持为private,你应当一直保留“更改底层实现”的权利然后通过protected方法来控制类的继承者的访问权限。

7.7向上转型

7.7.1为什么称为向上转型

1、导出类是基类的一个超集。它可能比基类含有更多的方法,但他必须至少具备基类中所含有的方法。

7.7.2再论组合与集成

1、如果必须向上转型,则继承是必要的。

7.8final关键字

7.8.1final数据

1、有时数据的恒定不变是很有用的

(1)一个永不改变的编译时常量

(2)一个在运行时被初始化的值,而你不希望它被改变

2、一个既是static又是final域只占据一段不能改变的存储空间(编译期常量)。

3、对于基本类型,final使数值恒定不变,而用于对象引用,final使引用恒定不变。

4、既是static又是final的域,将用大写表示,并使用下划线分割各个单词。

5、不能因为某数据是final的就认为在编译时可以知道它的值。因为它可以在运行时再赋值。

6、将final数值定义为静态和非静态的区别:此区别只有当数值在运行时内被初始化才显现,这是因为编译器对编译时数值一视同仁。

7、final参数:指明为final的参数,可以读参数,单不能修改参数。

7.8.2final方法

1、使用原因

(1)把方法锁定,以防任何继承类修改它的含义。

(2)过去建议使用final方法是因为效率(现在不存在了)

2、当基类的某方法为private时,再写一个同名方法,此时并没有覆盖该方法,仅是生成了一个新的方法。

7.8.3final类

1、由于final类禁止继承,所以final类中的所有的方法都隐式指定为final。

7.9初始化及类的加载

1、加载顺序:先基类的static,再子类的static。

2、创建顺序:先子类的构造器,再基类的构造器。

转载于:https://my.oschina.net/u/2427561/blog/1558982

《java编程思想》学习笔记——复用类相关推荐

  1. Java编程思想读书笔记——复用类

    第七章 复用类 组合和继承是复用类的两种主要方式. 7.1 组合语法 组合只需将对象引用置于新类中即可.这些引用的初始化方式有四种: 1) 在定义对象的地方进行初始化,即在创建新类对象前就被初始化: ...

  2. Java编程思想学习笔记-第11章

    <?xml version="1.0" encoding="utf-8"?> Java编程思想学习笔记-第11章 Java编程思想学习笔记-第11章 ...

  3. JAVA编程思想学习笔记——第一章 对象导论

    搞了一年多java,野路子出身,发现java基础这块还是相当的薄弱!故决定学习<Java编程思想>这本书.在此把学习的知识点记录下! 面向对象的五大特性 1.万物皆为对象 2.程序是对象的 ...

  4. Java编程思想学习笔记4 - 序列化技术

    今天来学习下Java序列化和反序列化技术,笔者对<Java编程思想>中的内容,结合网上各位前辈的帖子进行了整理和补充,包括: 序列化概述 Java原生序列化技术 Hessian序列化技术 ...

  5. Java编程思想 学习笔记7

    七.复用类 1.组合语法 在新的类中产生现有类的对象.由于新的类是由现有类的对象所组成,所以这种方法叫做组合. 类中域为基本类型时能够自动被初始化为零.对象引用被初始化为null. 编译器不是简单地为 ...

  6. java编程思想学习笔记(第七章:复用类)

    复用代码是java众多引人注目的功能之一.但是要想成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它还必须能够做更多的事情. 7.1组合语法 将对象引用置于新类中.每一个非基本类型的对象 ...

  7. Java编程思想 学习笔记1

    一.对象导论 1.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了纯粹的面向对象程序设计方式 1)万物皆 ...

  8. java编程思想 学习笔记(2)

    第二章     一切都是对象 用引用(reference)操纵对象 String s = "asdf"; String s; 但这里所创建的只是引用,并不是对象.如果此时向s 发送 ...

  9. JAVA编程思想读书笔记(三)--RTTI

    接上篇JAVA编程思想读书笔记(二) 第十一章 运行期类型判定 No1: 对于作为程序一部分的每个类,它们都有一个Class对象.换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当的说, ...

  10. 01.Java 编程入门学习笔记20210307

    Java 编程入门学习笔记-day01 第0章:编程入门 1.计算机的概述 计算机 = 硬件 + 软件 1.1硬件:冯诺依曼体系 CPU: CPU的衡量标准:速度的计量单位是赫兹(Hz),1Hz相当于 ...

最新文章

  1. 教你用Python进行自然语言处理(附代码)
  2. asp.net Repeater取得CheckBox选中的某行某个值的c#写法
  3. SQL模糊查询 LIKE
  4. 未签名程序使用java_java applets(未签名)可以创建/读取cookie吗?
  5. html页面如何复用,html代码用js实现复用
  6. windows下CodeBlocks TMD-GCC安装及配置
  7. java RSA加密生成license,用CPU序列号生成机器码
  8. python处理期货数据_用Python下载并分析期货持仓数据
  9. itext 表格宽度自适应_微信公众号推文中如何自定义添加表格?
  10. axure share联网失败
  11. el-select 默认选中url参数对应的选项
  12. c花体复制_能复制的花体英文字母
  13. 坐标转换 | 高斯坐标转经纬度坐标
  14. 江苏省计算机一级考试难度,浅谈江苏省计算机等级考试(一级除外)
  15. windows使用模拟器
  16. OpenCV3的GPU模块编译
  17. android java开发
  18. java组织树级结构
  19. 如何------使用Minecraft模组Mod开发?
  20. Kony 如何获取Android context

热门文章

  1. WEBGIS体系和OGC标准
  2. Flex值得一看参考资源
  3. 定义结构体的时候,里面的变量可以同时初始化吗?(不可以)
  4. DFS深度优先搜索算法/BFS广度优先搜索算法(c/c++)
  5. 第13章 Kotlin 集成 SpringBoot 服务端开发(1)
  6. 修改 keystore密码
  7. Centos 安装Docker
  8. 实例学习SSIS(四)--使用日志记录和错误流重定向
  9. hp 服务器系统无法启动不了怎么办,HP Elite X2 1011 G1 笔记本电脑 - 电脑无法启动至预启动执行环境...
  10. linux svn 启动两个库,linux – 在一个存储库上运行两个svnserve实例是安全的,还是只有一个?...