《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 每个对象 ...
随机推荐
- js中的0就是false,非0就是true。
在处理js代码判断真假时经常会这么写. var vale = fun();//从某个地方获取的值. if(!value){ 进入这里表示value为false或不存在 }但fun()可能得到的是数字0 ...
- Skeleton Screen加载占位图(内容出现前显示灰色占位图)的分析与实现
今天有几个好友问了这个叫加载占位图的实现方法,我还在此问题下做了个回答.由于国内对这个的名词是各有各的叫法,所以这里直接用加载占位图来解释.相信很多人都看到过图中这样的加载方式: 这个图是一个国内知名 ...
- 前端每日实战:27# 视频演示如何用纯 CSS 创作一个精彩的彩虹 loading 特效
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/vjvoow 可交互视频教程 此视频 ...
- 【10】openlayers 视图view
创建地图: //View对象代表地图的简单2D视图 //创建view let view = new ol.View({ center:[109,34],//视图的初始中心 maxZoom:18,//最 ...
- 吐血干货,直播首屏耗时400ms以下的优化实践
导读: 直播行业的竞争越来越激烈,进过18年这波洗牌后,已经度过了蛮荒暴力期,剩下的都是在不断追求体验.最近在帮做直播优化首开,通过多种方案并行,把首开降到500ms以下,希望能对大家有借鉴. 背景: ...
- 从火箭发场景来学习Java多线程并发闭锁对象
从火箭发场景来学习Java多线程并发闭锁对象 倒计时器场景 在我们开发过程中,有时候会使用到倒计时计数器.最简单的是:int size = 5; 执行后,size—这种方式来实现.但是在多线程并发的情 ...
- 项目中 关于localstorage、cookie的坑?明明设置了本地存储为什么没生效
1.简单的介绍一下localStorage,sessionStorage,cookie localStorage:仅在客户端存储不参与服务器通信,存储大小一般为5M,如果不是人为清除,那么即使是关闭浏 ...
- 网络安全从入门到精通 (第二章-1) Web安全前端基础
本文内容: 前端是什么? 前端代码 HTML CSS JS !!!醋成酒的小墨,促成就的小墨,小墨促成就,!!! 1,前端是什么? 网站一般用两部分组成,前端负责展示,后端负责处理请求. 2,前端代码 ...
- 从一个小例子引发的Java内存可见性的简单思考和猜想以及DCL单例模式中的volatile的核心作用
环境 OS Win10 CPU 4核8线程 IDE IntelliJ IDEA 2019.3 JDK 1.8 -server模式 场景 最初的代码 一个线程A根据flag的值执行死循环,另一个线程B只 ...
- 【译】HTTP/2 为更快速的网站而生
最近在做一个内部的服务对接,使用了Google的gRPC框架,gRPC是基于HTTP/2和protocol buffers实现的,所以额外去了解了一下HTTP/2,找到这这边文章.这篇文章虽然是写于2 ...