初读"Thinking in Java"读书笔记之第七章 --- 复用类
- 组合语法
- 将对象引用置于新类中,即形成类的组合。
- 引用初始化方法
- 在定义处初始化。
- 在类的构造器中初始化。
- 在使用这些对象之前,进行"惰性初始化"。
- 使用实例初始化。
- 继承语法
- Java中所有的类都是在继承,如果没有明确指出继承的类,则就从根类Object中继承。
- 每个类中都可以有main方法,可以方便单元测试。
- 即使一个类只具有包访问权限,其public main()仍然是可以访问的。
- 继承是对类的复用,可以获得所继承的类中的非私有的方法。
- 采用
super关键字可以访问父类(超类)中的方法。 - 导出类的构造方法中第一句语句必须是调用基类的构造方法。
- 当创建一个导出类的对象时,该对象包含了一个基类的子对象(没有创建基类对象)。
- 导出类对象创建之前,基类的构造器会先执行;如果导出类没有显式的构造器,则编译器会默认调用基类的构造器。
- 代理
- 是继承与组合的中庸之道。
- 继承会将基类的所有方法都在导出类中暴露,而代理可以实现仅仅将方法的子集在导出类中暴露。
- 结合使用组合和继承
- 导出类中可以重载基类中的方法,也可以覆盖基类中重载的方法。
- 在组合与继承之间选择
- 组合和继承都允许在新的类中放置子对象,组合是显式这样做,继承是隐式地做。
- 组合通常用于在新类中使用现有类的功能,而非它的接口。新类的用户只能看到新类的接口,而看不到嵌入对象的接口。
- 继承通常意味着在使用一个通用类,并为了某种特殊需要而将其特殊化。
- protected关键字
- 提供了继承类及包内访问权限。
- 当希望实现过程对用户隐藏,而对于类继承者开放的时候,可以使用protected。
- 向上转型
- 子类向父类的转型称为向上转型。向上转型不需要强制转换。
- 向上转型是安全的,因为子类是父类的超集合,含有更多的方法,因此转型过程中唯一可能发生的问题是方法不存在。
- 要谨慎使用继承技术,在使用时,如果必须向上转型,则继承是必要的。
- final关键字
- final数据
- 表示常量,在编译时即可参与运算,java中的常量必须是基本数据类型。
- 一个即是static又是final的数据只占据一段不能改变的存储空间,通常用全部大写加下划线的方式命名。
- final如果指向引用,则引用的指向是无法改变的,但是所指向的对象自身是可以改变的。
- 非static的final常量,在每次创建对象时都会初始化一次,然后不可改变;static的final常量,在初次类加载时初始化一次,以后再创建对象时将不会再初始化。
- 可以使用空白final,在定义时不初始化,而在构造方法中初始化。
- final也可以用在参数列表中,这意味着无法在方法中更改参数引用所指向的对象,主要用来向匿名内部类传递数据。
- final方法
- 锁定方法,以防任何继承类修改其含义。
- private方法默认隐含了final关键字。当采用向上转型方式访问基类中的private方法时,将会报错。private方法不是类的接口,因此除了对该类而言,其余类都是不可见的。
- final类
- final修饰的类,不能被继承,不能被改动。
- final类中数据可以不是final,因此可以被修改。而final类中的方法都被隐含修饰为final,不能被覆盖。
- final数据
- 初始化及类的加载
- Java中每个类的编译代码都存在于独立的文件中,只有在需要使用时才会被加载。
- 类的代码在初次使用时才加载,加载类的动作仅发生一次
- 加载发生于创建类的第一个对象时
- 加载发生于访问static域活static方法时。
- 加载时,所有的static对象和static代码段都会依程序中的顺序初始化。当然static的东西只会被初始化一次。
- 继承与初始化
- 当加载一个导出类时,会从其根类一直到该导出类加载static变量,但是并不会创建基类对象,即不会执行基类的构造方法。
- 类加载完毕后,对象就可以被创建了。首先对象中的所有基本类型及引用类型都被默认初始化。然后从基类到导出类执行构造方法。
- 总结
- 继承和组合都能从现有类型生成新类型。组合是复用现有类型的功能,继承是复用现有类型的接口。
- 开始一个设计时,一般优先选择使用组合,只在确实必要时使用继承。
初读"Thinking in Java"读书笔记之第七章 --- 复用类的更多相关文章
- 初读"Thinking in Java"读书笔记之第五章 --- 初始化与清理
用构造器确保初始化 构造器可以确保每个对象都会得到初始化,Java毁在创建对象时自动调用构造器. 构造器采用与类名相同的名称,因此并不适合"每个方法首字母小写的风格". 构造器默认 ...
- 初读"Thinking in Java"读书笔记之第六章 --- 访问权限控制
包:库单元 包内包含有一组类,他们在单一的名字空间下被组织在一起. 通过import ***.***.*可以将某个包下的所有类导入到当前文件中. 每个Java源文件最多只能有一个public类,且名称 ...
- 初读"Thinking in Java"读书笔记之第四章 ---控制执行流程
true和false Java不允许将数字作为布尔值使用. 所有条件表达式都将布尔值作为判断条件,决定执行路径. if-lese 迭代 while,do-while,for为三个迭代语句. ,逗号操作 ...
- 初读"Thinking in Java"读书笔记之第三章 --- 操作符
更简单的打印语句 导入自己编写的静态类库,即可使用print();打印 使用Java操作符 操作符:+,-,*,/,=,==,!=,+=,?:,%等 几乎所有操作符都只能操作"基本类型&qu ...
- 初读"Thinking in Java"读书笔记之第二章 --- 一切都是对象
用引用操纵对象 Java里一切都被视为对象,通过操纵对象的一个"引用"来操纵对象. 例如, 可以将遥控器视为引用,电视机视为对象. 创建一个引用,不一定需要有一个对象与之关联,但此 ...
- 初读"Thinking in Java"读书笔记之第九章 --- 接口
抽象类和抽象方法 abstract void f();抽象方法是仅有声明而没有方法体的方法. 包含抽象方法的类叫做抽象类,如果一个类包含了一个抽象方法,则该类必须限定为抽象类. 抽象类和抽象方法可以使 ...
- 初读"Thinking in Java"读书笔记之第八章 --- 多态
再论向上转型 在某些方法中,仅接收基类作为参数,而不是特殊的导出类,会使得程序更容易扩展. 转机 方法调用绑定 前期绑定(编译期绑定):在编译期将一个方法调用和方法主体关联起来. 后期绑定(动态绑定或 ...
- [Java编程思想] 第七章 复用类
第七章 复用类 第一种方法非常直观:只需在新的类中产生现有类的对象(组合). 第二种方法更细致一些:它按照现有类的类型来创建新类(继承). 7.1 组合语法 只需将对象引用置于新类中即可. cla ...
- 《深入理解java虚拟机》读书笔记六——第七章
第七章 虚拟机类加载机制 1.类加载的时机 虚拟机的类加载机制: 虚拟机把描述类的数据从class文件中加载到内存,并对数据进行校验.转换解析和初始化,最终形成了可以被虚拟机直接使用的Java类型,这 ...
随机推荐
- ASP.NET MVC 访问静态文件
When use asp.net MVC, we can add a special route to access the image files. the code like below: 1. ...
- Vue-admin工作整理(十七):Mock模拟Ajax请求
思路:使用Mock拦截actions请求,通过 Mock.mock(/\/getUserInfo/, 'post', getUserInfo) 进行拦截标示,然后将内容返回 export const ...
- python多环境下虚拟环境的搭建和使用
由于开发环境要求,或者实际需要.经常会出现python2.7和python3.x共存下的开发环境问题.虚拟环境的搭建可以很好的隔离Projects的开发环境. 1.首先解决python2.7和pyth ...
- OceanBase迁移服务:向分布式架构升级的直接路径
2019年1月4日,OceanBase迁移服务解决方案在ATEC城市峰会中正式发布.蚂蚁金服资深技术专家师文汇和技术专家韩谷悦共同分享了OceanBase迁移服务的重要特性和业务实践. 蚂蚁数据库架构 ...
- C++_day7_继承
#include <iostream> using namespace std; class Human{ public: Human(string const& name, in ...
- Jquery封装的Ajax
$.get方法 语法: $.get(url,data,function(e){ //e就是服务器返回的数据 },dataType); 四个参数: url: 请求的服务器地址 data: 发送给服务器的 ...
- CSS中的单位px、em、rem、%、vw、vh、vm
px 相对长度单位,像素px 是相对于显示器屏幕分辨率而言的.是我们网页设计常用的单位,也是基本单位. 通过 px 可以设置固定的布局或者元素大小,缺点是没有弹性.用 px 设置字体大小时,比较稳定和 ...
- EasyUI 中 Combobox里的onChange和onSelect事件的区别
EasyUI 中 Combobox 选项发生改变时会触发 onChange,onSelect,onClick 3 个事件. 最近要做一个级联的 Combo 菜单,类似于选择地址时让用户填写省,市,区的 ...
- 乐观锁vs悲观锁, 集群vs分布式 , 微服务, 幂等性
乐观锁: 总认为不会产生并发问题,因此不会上锁,更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作来实现 version: 数据上有数据版本号version字段,每次更 ...
- 访问链接出现 ERR_CONTENT_DECODING_FAILED 错误的解决办法
今天跑一个应用,别人的机器上都是好的,但是本地部署就是不行.访问页面调试工具console总是提示 ERR_CONTENT_DECODING_FAILED 错误. 就是数据表格无法显示,经排查,发现是 ...