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编程思想》对象导论的更多相关文章

  1. java编程思想---对象

    一.对象 对于每种语言来说,都有自己操纵内存中元素的方法. 在java中,一切被视为对象.可是操纵对象的是一个"引用".举个样例,能够比作为遥控器对电视的操作,遥控器就是引用,而电 ...

  2. Java编程思想读书笔记(一)【对象导论】

    2018年1月7日15:45:58 前言 作为学习Java语言的经典之作<Java编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我 ...

  3. [Java编程思想] 第一章 对象导论

    第一章 对象导论 "我们之所以将自然界分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来--除非赞成这个协定中规定的有 ...

  4. Java编程思想学习(一)----对象导论中多态的理解

    1.1抽象过程 1)万物皆对象. 2)程序是对象的集合,他们通过发送消息来告知彼此所要求做的. 3)每个对象都有自己的由其他对象所构成的存储. 4)每个对象都拥有其类型. 5)某一特定类型的所有对象都 ...

  5. Java编程思想 4th 第2章 一切都是对象

    Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情通过类对象协作来完成 ...

  6. JAVA编程思想读书笔记(四)--对象的克隆

    接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObje ...

  7. 《java编程思想》读书笔记(一)开篇&第五章(1)

    2017 ---新篇章  今天终于找到阅读<java编程思想>这本书方法了,表示打开了一个新世界. 第一章:对象导论 内容不多但也有20页,主要是对整本书的一个概括.因为已经有过完整JAV ...

  8. Java编程思想 (1~10)

    [注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第一章 对象导论 1.万物皆对象2.程序就是对象的集合3.每个对象都是由其它对象所构成 ...

  9. Thinking In Java读书笔记--对象导论

    Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...

  10. Java编程思想总结笔记The first chapter

    总觉得书中太啰嗦,看完总结后方便日后回忆,本想偷懒网上找别人的总结,无奈找不到好的,只好自食其力,尽量总结得最好. 第一章  对象导论 看到对象导论觉得这本书 目录: 1.1 抽象过程1.2 每个对象 ...

随机推荐

  1. @JsonFormat、@DateTimeFormat注解,读取数据库晚一天问题

    @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss&qu ...

  2. HTML5 Canvas(基础知识)

    最近笔者在学习HTML5的新元素<canvas>,会分享一些基础知识以及小例子,最终使用<canvas>实现一个绘制简单图表(条形图.线图或者饼图)的js库,会更新一到两篇文章 ...

  3. iOS应用构建与部署小结

    注:本文首发于我的个人博客:https://evilpan.com/2019/04/06/ios-basics/ 上篇文章介绍了Objective-C的基本概念,本文就来接着看如何创建我们的第一个简单 ...

  4. Markdown语法说明及常用软件推荐(附链接)

    Markdown语法同样支持HTML标签 以下所有字符均为英文字符 标题 标题级别由#决定,一个为一级 样例 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ...

  5. 026.掌握Service-外部访问

    一 集群外部访问 由于Pod和Service都是Kubernetes集群范围内的虚拟概念,所以集群外的客户端默认情况,无法通过Pod的IP地址或者Service的虚拟IP地址:虚拟端口号进行访问.通常 ...

  6. SQLi-Labs之1~6关 - 常规注入与盲注

    年初五 财神入 第一关 联合注入 1.准备 2.加'截断 3.order by 判断查询列数 4.同上 5.联合查询判断字段位置 6.查数据库名 7.1 查表名 7.2 查列名 8.查数据 第二关 不 ...

  7. 软件WEB自动化测试工具之智能元素定位

    江湖一直有着这么一句名言“天下武功,唯快不破".那么在软件测试领域,自然而然我们会想到软件自动化测试.软件自动化测试的实现自然离不开软件自动化测试工具.软件自动化测试工具是软件自动化的载体, ...

  8. Redis篇之操作、lettuce客户端、Spring集成以及Spring Boot配置

    Redis篇之操作.lettuce客户端.Spring集成以及Spring Boot配置 目录 一.Redis简介 1.1 数据结构的操作 1.2 重要概念分析 二.Redis客户端 2.1 简介 2 ...

  9. 解决Ajax中IE浏览器缓存问题

    解决Ajax中IE浏览器缓存问题 1.首先,先看一张图.从这张图中我们可以清楚的了解到从请求的发出到解析响应的过程. 2.根据图中的三个节点我们可以使用三种方式解决这个缓存问题(主要是针对ie) 2. ...

  10. [日志分析]Graylog2采集mysql慢日志

    之前聊了一下graylog如何采集nginx日志,为此我介绍了两种采集方法(主动和被动),让大家对graylog日志采集有了一个大致的了解. 从日志收集这个角度,graylog提供了多样性和灵活性,大 ...