前言

面向对象程序设计(OOP)是当今主流的程序设计范性,它取代了结构化或过程式编程技术。

一、面向对象是什么?

1、定义:

面向对象就是:把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。对象即为人对各种具体物体抽象后的一个概念,人们每天都要接触各种各样的对象,如手机就是一个对象。
java中有一个概念就是万物皆可对象。
面向对象的程序是由对象组成的,每个对象包含用户公开的特定的功能部分和隐藏的实现部分。
面向对象更适合解决规模更大的问题,举个例子:
要想实现一个简单的web浏览器可能需要大约2000个过程,这些过程需要对一组全局操作进行操作,采用面向对象的思想,可能大约只需要100个类,每个类平均包含20个方法。后者更易于程序员掌握,也容易找到bug。

2、优点(重要):

1、易维护
采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的,上文也说了容易找bug。
2、质量高
在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
3、效率高
在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于人日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展
由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

3、对象的特性

对象的行为:可以对象的完成哪些操作或者可以对对象应用那些方法?
对象的状态:每个对象都保存着当前状况的信息。对象的状态可以随着时间而改变,但不是自发的,必须通过调用方法实现,不然就破坏了封装性。
对象的标识:如何区分具有相同行为和状态的不同对象? 每个对象都有唯一的标识。作为同一个类的实例。每个对象的实例标识总是不同的。

4、与面向过程的区别

二、类

1、类的定义:

类是构造对象的模板和蓝图。我们可以把类看作制造小饼干的模具,那么对象就是小饼干。
由类构造对象的过程是被称为构建类的实例。

2、封装

封装从形式看,就是将数据和行为组合在一个包中,并对对象的使用者隐藏具体的实现方式。
实现封装的关键在于绝不能让类中的方法去直接访问其他类的实例字段。程序只能通过对象的方法与对象数据进行交互。
封装给对象赋予了黑盒特征,这是提高了重用性和可靠性。

3、继承

基本思想就是基于已有的类创造新的类,继承已存在的类就是复用这些类的方法,而且增加一些新的方法和字段,使新类适应新的情况。

三、多态(重点来喽)

1、多态的定义:

面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。
多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
多态是基于替换原则,他指出程序出现超类对象的任何地方都可以用子类对象替换。

2、条件和技术

多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。(及如果父类的方法被子类重写,运用子类的方法)

实现多态的技术称为:动态绑定(下面有补充)

3、运行时多态和编译时多态(重要):

其实从java多态的定义来说编译多态并不能真正算做多态,有时候我们也叫他静态多态性
编译时多态主要指的是函数的重载,例如有一个类这个C有一个方法F,但是同时存在F(int),和F(String),当我们的代码中有c.F(param)时,编译器会将C类中说有名为F的方法和父类中属性为public且名为F的方法。接下来编译器会查看param的类型,比如c.F(“hello”)就会挑选F(String)而不是F(int),如果调用c.F(1),编对应的译器就会选择F(int)。如果挑选不到对应的方法或者多个方法对应就会报错。(基于方法的重载)
运行时多态性:
运行时多态性主要运用到动态绑定。就是在运行时动态的确定调用的是哪一个函数。比如:如果A有多个之类,每个子类都有f(Stirng)方法,当我们声明一个A的对象a,对它用不同的子类进行不同的实例化。这样这个方法可以产生不同的效果,也就是实现了多态。(基于方法的重写)

4、多态的好处:

1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,draw函数对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

四、补充:程序绑定

1、程序绑定的概念:

绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定.

2、静态绑定:

在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法),此时由 编译器或其它连接程序实现。例如:C。
针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定

3、动态绑定:

后期绑定: 在运行时根据具体对象的类型进行绑定。
若一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。也就是说, 编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。不同的语言对后期绑定的实现方法是有所区别的。但我们至少可以这样认为:它们都要在对象中安插某些特殊类型的信息。
动态绑定的过程:
1.虚拟机提取对象的实际类型的方法表;
2.虚拟机搜索方法签名;
3.调用方法。

面向对象的理解及相关概念(封装,继承,多态)相关推荐

  1. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  2. 面向对象的三大特征:封装 继承 多态

    封装: 封装的概念: 代码的整合, 封装的层次: 函数的封装: 把一组操作整合在一起 类的封装: 把属性和方法整合在一起 结构的封装:根据操作的性质(模型/控制操作/交互视图)进行结构设计封装 ...

  3. 【Kotlin】Kotlin 面向对象 ( 类 | 成员变量 | 成员方法 | 封装 | 继承 | 多态 )

    文章目录 I . 创建简单类 ( 整型字段 ) II . 创建简单类 ( 整型字段 + 字符串字段 ) III . 类方法定义 IV . 封装 V . 继承 VI . 多态 与 抽象类 I . 创建简 ...

  4. php对象的三大特征,关于php中面向对象的三大特征(封装/继承/多态)

    最近在学习php的过程中发现它其实比java的语言要松散很多,而且很多人说上手比较容易,但是智言我个人并不是很认同这样的观点,因为其实java的整个语法规则都非常的有条有理,虽然函数很多,但是至少经常 ...

  5. 大数据笔记8—java基础篇4(面向对象-封装-继承-多态)

    面向对象 一.面向对象 1.面向过程 1.2.举例 1.3.总结 二.面向对象 1.简述 2.举例 3.思想特点 2.1.类的定义格式 2.1.1.简述 2.2.2.格式 2.3.3.示例 三.类的使 ...

  6. 小白理解——封装继承多态

                                      一.封装 是什么:首先是抽象,把事物抽象成一个类,其次才是封装.对外表示为一个对象,隐藏对象的属性和动作实现的细节,仅对外公开接口. ...

  7. 面向对象 编程及面向对象三大属性:封装 继承 多态

    面向对象 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构. ...

  8. python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

  9. python--编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音------使用类的封装继承多态的问题/使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息

    编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音 ------使用类的封装继承多态的问题 class Instrumnet():#乐器类def make_sound(self):pa ...

  10. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

最新文章

  1. asp.net UrlRewrite 技术的实现
  2. C# Interlocked 笔记
  3. HDU-1045-fire net
  4. html应用中心模板,HTML5--应用网页模板
  5. 上海纳税百强2016,邢台2017纳税百强,深圳百强企业
  6. Oracle SQL精妙SQL语句讲解(二)
  7. 【转】Spark源码分析之-scheduler模块
  8. php猴子找大王算法,教程方法;php实现猴子选大王问题算法实例电脑技巧-琪琪词资源网...
  9. java输出华氏摄氏温度转换表_Python练习题2.10输出华氏-摄氏温度转换表
  10. php 默认是几进制数,以0x开头的是多少进制?
  11. MySQL 5.7新特性
  12. 项目开发中如何提升团队的战力?
  13. 蓝桥杯2020年第十一届C/C++国赛B组第一题-美丽的2
  14. iOS开发之开发者账号的申请进度跟进(申请的询问)
  15. OpenCV-图像处理(12、形态学操作应用-提取水平与垂直线)
  16. java建立英文停用词表_HanLP-停用词表的使用示例
  17. linux图片处理软件,Ubuntu 下图像处理软件汇总
  18. 简单易学又有效的颈椎病自我康复操
  19. 密码加盐(salt)
  20. Spring data mongodb实现LBS

热门文章

  1. 贝叶斯优化优化参数,以Kmeans为例
  2. pandas保存为excel,同时设置保存的excel的样式
  3. flutter 刷脸_支付宝刷脸认证 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. oracle startup作用,【学习笔记】Oracle打补丁后startup migrate、startup upgrade区别分析...
  5. 微软服务器系统桌面无图标,开机桌面没有图标的几种解决方法
  6. HiveQL:文件格式和压缩方法
  7. 题目1198:a+b
  8. PHP 发送HTTP post请求发送和获取
  9. Js数组排序函数sort()介绍
  10. mysqlbinlog工具_MySQL binlog相关分析