《java编程思想》对象导论
1.抽象过程
所有编程语言都提供抽象机制。可以认为,人们所能够解决的问题的复杂性直接取决于抽象的类型和质量,所谓的'类型'是指“所抽象的是什么?”汇编语言是对底层机器的轻微抽象。
java的基本 特性:
(1) 万物皆为对象
(2) 程序是对象的集合,它们通过发送消息来告知彼此所要做的
(3) 每个对象都有自己的由其他对象所构成的存储
换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象
(4) 每个对象都拥有其类型
(5) 某一特定类型的所有对象都可以接收同样的消息
2.每个对象都提供服务
当试图开发或理解一个程序设计时,最好的办法之一就是将对象想象为"服务提供者"。程序本身将向用户提供服务,此外程序还将通过调用其他对象提供的服务来实现这一个目的
3.被隐藏的具体实现(java中的四种访问权限)
(1) public
public 修饰的元素任何人都可以访问
(2) private
private 修饰的元素只能类的创建者和类的内部方法可以访问
(3) protected
protected 和 private 的作用差不多,区别在于类的继承者能访问protected 元素不能访问Private 元素,并且同一个包下的元素也能访问
(4) 默认访问权限
当没有使用任何一种元素修饰时,就是默认访问权限,这种也被称为包级别访问权限,即可以访问同一个包下的元素
4.复用具体实现
代码复用是面向对象程序设计语言所提供的的最了不起的优点之一
最简单的复用某个类的方式就是直接使用这个类的一个对象,此外也可以将这个类的一个对象置于其他新的类里面。新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成,因为是在使用现有的类合成新的类,所以这种也被称为"组合",如果组合是动态发生的,那么这种则被称为"聚合",组合经常被称为 "has-a" (拥有)关系,就像常说的汽车拥有引擎一样。
5.继承
对于继承可能引发某种争论:继承应该只覆盖基类的方法吗?如果这样做,意味着基类和导出类是完全相同的类型。结果可以用一个导出类对象完全替代基类对象,这可以被视为纯粹替代,通常称之为替代原则。在某种意义上这是处理继承的一种理想方式,这种关系经常被理解为 " is -a " 关系。
有时必须在导出类中添加新的接口元素,这样也就扩展了接口,这个新的类型仍然可以替代基类,但是这种替代并不完美,因为基类无法访问新添加的方法,这种情况我们通常描述为 " is - like- a " 关系。
6.伴随多态的可互换对象
程序绑定的概念:绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来,对java来说,绑定分为静态绑定(前期绑定)和动态绑定(后期绑定)
静态绑定:在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类的方法),此时由编译器或其他连接程序实现,针对java可以简单的理解为程序编译期的绑定。java中的方法只有 final、static、private和构造方法是前期绑定
private:private方法不能被继承,既然不能被继承就不能通过它子类的对象来调用,而只能通过这个类自身的对象来调用。因此可以说private方法和定义这个方法的类绑定在了一起
final:final方法虽然可以被继承,但不能被重写,虽然子类对象可以调用,但是调用的都是父类中的方法(由此可以推断出将方法声明为final类型,一是为了防止覆盖,一是为了防止动态绑定)
构造方法:构造方法也是不能被继承(网上说子类无条件的继承父类无参数构造函数作为自己的构造函数,不过我个人认为这个说法不太恰当,我们知道子类是通过super()来调用父类的无参构造方法,来完成对父类的初始化,
而我们使用从父类继承过来的方法是不用这样做的,因此不应该说子类继承父类的构造方法),因此编译时也可以知道这个构造方法到底属于哪个类
动态绑定:在运行时根据具体对象的类型进行绑定。若一种语言实现了动态绑定,同时必须提供一些机制,可以在运行期间判断对象的类型,并分别调用适当的方法。也就是说编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体,不同的语言对对后期绑定的实现方法是有所区别的
动态绑定的过程:
1、虚拟机提取对象的实际类型的方法表
2、虚拟机搜索方法签名
3、调用方法
7.单根继承结构
在java中(事实上是包括除了C++以外的所有OOP语言),所有的类最终都集成自单一的基类。这个类的名字就是Object。
-------------
文中部分内容素材来自 https://www.cnblogs.com/jstarseven/articles/4631586.html
《java编程思想》对象导论的更多相关文章
- java编程思想---对象
一.对象 对于每种语言来说,都有自己操纵内存中元素的方法. 在java中,一切被视为对象.可是操纵对象的是一个"引用".举个样例,能够比作为遥控器对电视的操作,遥控器就是引用,而电 ...
- Java编程思想读书笔记(一)【对象导论】
2018年1月7日15:45:58 前言 作为学习Java语言的经典之作<Java编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我 ...
- [Java编程思想] 第一章 对象导论
第一章 对象导论 "我们之所以将自然界分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来--除非赞成这个协定中规定的有 ...
- Java编程思想学习(一)----对象导论中多态的理解
1.1抽象过程 1)万物皆对象. 2)程序是对象的集合,他们通过发送消息来告知彼此所要求做的. 3)每个对象都有自己的由其他对象所构成的存储. 4)每个对象都拥有其类型. 5)某一特定类型的所有对象都 ...
- Java编程思想 4th 第2章 一切都是对象
Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情通过类对象协作来完成 ...
- JAVA编程思想读书笔记(四)--对象的克隆
接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObje ...
- 《java编程思想》读书笔记(一)开篇&第五章(1)
2017 ---新篇章 今天终于找到阅读<java编程思想>这本书方法了,表示打开了一个新世界. 第一章:对象导论 内容不多但也有20页,主要是对整本书的一个概括.因为已经有过完整JAV ...
- Java编程思想 (1~10)
[注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第一章 对象导论 1.万物皆对象2.程序就是对象的集合3.每个对象都是由其它对象所构成 ...
- Thinking In Java读书笔记--对象导论
Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...
- Java编程思想总结笔记The first chapter
总觉得书中太啰嗦,看完总结后方便日后回忆,本想偷懒网上找别人的总结,无奈找不到好的,只好自食其力,尽量总结得最好. 第一章 对象导论 看到对象导论觉得这本书 目录: 1.1 抽象过程1.2 每个对象 ...
随机推荐
- 7-8 jmu-python-从列表中删除元素 (15 分)
删除列表中所有符合条件的值. 输入格式: 输入n,代表要测试n次.每次测试:首先,输入1行字符串(字符串内的元素使用空格分隔)然后,输入要删除的元素x. 输出格式: 输出删除元素x后的每行字符串.如果 ...
- emmet快速缩写展开的基本写法与心得
emmet的基本写法: .ct 点是class <div class="ct"></div> #ct 井号是id <div id="ct&q ...
- Ubuntu16.04如何安装bazel?
官方文档:https://docs.bazel.build/versions/master/install-ubuntu.html 我没有使用二进制的安装方法,以下是二进制的安装方法: Install ...
- Nginx的工作原理
Nginx 工作原理 Nginx由内核和模块组成. Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此locat ...
- python之迭代器 生成器 枚举 常用内置函数 递归
迭代器 迭代器对象:有__next__()方法的对象是迭代器对象,迭代器对象依赖__next__()方法进行依次取值 with open('text.txt','rb',) as f: res = f ...
- background-attachment 制造视差滚动效果案例
简介 background-attachment 属性设置背景图像是否固定或者随着页面的其余部分滚动.可能的值有三个: scroll 默认值.背景图像会随着页面其余部分的滚动而移动. fixed 当页 ...
- Simulink仿真入门到精通(二) Simulink模块
2.1 Simulink模块的组成要素 用户构建系统模型时无需直接面对成千上万行的代码,而是通过模块化图形界面以模块化的方式构建,能够使理解变得容易,让大脑减负.通过层次化模块分布将系统功能模块化,而 ...
- 痞子衡嵌入式:恩智浦SDK驱动代码风格检查工具预览版
大家好,我是痞子衡,是正经搞技术的痞子. 接上文 <恩智浦SDK驱动代码风格.模板.检查工具> 继续聊,是的,过去的三天里我花了一些时间做了一个基于 PyQt5 的 GUI 工具,可以帮助 ...
- postgresql自增字段初始值的设定
在实际开发中会有这样的需求,想要自己设置表中自增字段的初始值. 比如:有一个your_table表中有一个自增字段id,我们知道,插入数据后,默认是从1开始自增的. 但是假如现在有一个需求,是要求id ...
- 死磕Lambda表达式(三):更简洁的Lambda
我们都是阴沟里的虫子,但总还是得有人仰望星空.--<三体> 在之前的文章中介绍了Lambda表达式的基本语法和正确使用姿势,这次我来介绍一些Lambda更简洁的用法. 欢迎关注微信公众号: ...