面向对象

  一切皆对象。程序是对象的集合,它们通过发送消息来告知彼此所要做的。也就是说:以对象为中心,以消息(发送消息即为函数调用)为驱动。对象具有状态,行为和标识。

  1. 状态:指类的数据成员,即属性;
  2. 行为:指类的方法成员;
  3. 标识:指每个对象在内存中有唯一的地址标识。

四个(3+1)特征:封装、继承、抽象、多态

  面向对象的三大特征:抽象、继承、封装。

1. 封装

  隐藏该隐藏的,暴露该暴露的。有所隐藏又有所公开,是指隐藏对象的属性和实现细节,仅对外提供公共访问的方式。

  好处:隐藏细节,将变化隔离;便于使用;提高重用性;控制访问,提高安全性。

2. 继承

  从一般到特殊的关系,是一种扩展关系,子类对象是父类的一种,也可称为”is a“的关系,Java中表现为类的单继承、接口的多继承。

  • 继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力
  • 继承通过extends来实现
  • 继承提高了代码的复用性,提高了软件的开发效率。让类与类之间产生关系,这个是实现多态的前提。

3. 抽象

  抽象:从特定的角度出发,从已经存在的一些事物中抽取我们所关注的特性、行为,从而形成一个新的事物的思维过程,是一种从复杂到简洁的思维方式。

  • 数据结构的抽象:复杂的数据类型,隐藏实现细节,公开相关的操作。
  • 行为方法的抽象

  Java中的接口抽象类。接口可以看成是一种协议或者约定。可以参考开闭原则(OCP:Open/Closed Principle)【对扩展开放,对修改关闭】,其关键是做到“抽象化设计”

4. 多态

  指允许类的不同对象对同一消息做出不同的响应,即同一消息可以根据接收对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。

  实现多态的技术称为:动态绑定(dynamic binding),是指在运行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

  多态的作用:消除类型之间的耦合关系。

  多态存在的三个必要条件

  1. 继承或接口实现;
  2. 重写Override;
  3. 父类引用指向子类对象。

多态的好处:

  1. 可替换性(substitutability):多态对已存在代码具有可替换性。父类引用可以指向任意的子类实现。
  2. 可扩展性(extensibility):多态对代码具有可扩展性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。增加子类会增加不同的实现方式。
  3. 接口性(interface-ability):多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
  4. 灵活性(flexibility):它在应用中体现了灵活多样的操作,提高了使用效率。
  5. 简化性(simplicity):多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

多态参考:Java多态性理解

方法调用过程如下

  1. 编译器查看对象的声明类型和方法名。
  2. 接下来,编译器将查看调用方法时提供的参数类型。如果在所有的同名方法中存在一个与提供的参数类型完全匹配,就选择这个方法。这个过程被称为重载解析(overloading resolution)。方法的名字和参数列表称为方法的签名。返回类型不是签名的一部分。
  3. 如果是private方法、static方法、final方法或者构造器,那么编译器将可以准确地知道应该调用哪个方法,这种调用方式称为静态绑定(static binding)。
  4. 当程序运行,并且采用动态绑定调用方法时,虚拟机会调用与对象变量所引用对象的实际类型最合适的那个类的方法。
  5. 虚拟机预先为每个类创建了一个方法表(method table),其中列出了所有的方法签名。在覆盖一个方法时,子类方法不能低于超类方法的可见性。动态绑定只是针对方法,对属性无效。

Java:面向对象的理解的更多相关文章

  1. JAVA面向对象思想理解分析

    1.面向对象是面向过程而言.两者都是一种思想.面向过程:强调的是功能行为.(强调过程.动作)面向对象:将功能封装进对象,强调了具备了功能的对象.(强调对象.事物)面向对象是基于面向过程的.将复杂的事情 ...

  2. Java面向对象的理解

    Java是一门面向对象的编程语言(Object Oriented Programming,OOP), 这个句话是每个学习Java的程序员应该先深刻理解的一句话. 我们之所以将自自然界分解,组织成各种概 ...

  3. 谈谈你对Java面向对象的理解

    面向对象,其实是一种思考的思想,是一种思想,而这种思想它早期的思想是面向过程,通过不断的演化变成了现在的面向对象,思想有一个演变形式,早期是面向过程,现在是面向对象. 故事:把大象放进冰箱里,分几步? ...

  4. java面向对象的理解(个人)

    面向对象是Java的基本特征,在程序开发的过程中基于面向过程的一种思维,将功能封装进对象,强调具备这些功能的对象和调用结果,不关注具体的实现过程. 面向对象的特点:是一种更符合人们思考习惯的思想,可以 ...

  5. 理解JAVA - 面向对象(object) - 属性,方法

    理解JAVA - 面向对象(object) - 属性,方法 多态的体现:    向上造型,父类接收子类对象:向上造型:    从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...

  6. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  7. (一)如何理解java面向对象编程

    哲学中,事物总是螺旋式上升,波浪式前进.因而编程也逐渐向人类更容易理解的方向前进,多年来人们苦苦追求的编程境界 : 高扩展性(extensibility),高复用性(reuseable).java语言 ...

  8. Java面向对象㈠ -- 封装

    Java的面向对象有三大特征:封装.继承.多态.这里主要对封装进行讲解. 封装可以理解为隐藏一个类的成员变量和成员函数,只对外提供需要提供的成员函数. Java的封装主要通过访问权限控制符:priva ...

  9. 谈谈Java面向对象的三大特性

    Java面向对象的三大特性就是指封装.继承.多态了. 一.封装: 概念:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (举例:笔记本电脑就是一个封装体,Java语言中最小的封装体就是函数 ...

  10. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

随机推荐

  1. vue table已选列数据

    vue Table@on-selection-change="test" 已选中项数据 test(selection){} <Table :data="tableD ...

  2. Ubuntu1804 双网卡的设置

    在WIFI模式下,既可以使用ping开发板,又可上网.     目标:ubuntu1804下使用两个网卡 网卡(eth0):用于桥接主机的物理网卡 网卡(eth1):用于NAT模式下共享主机IP,用于 ...

  3. 转载-- SQL连接查询2 外连接(左右联接查询)

    http://www.cnblogs.com/zhangqs008/archive/2010/07/02/2341196.html 外连接主要包括左连接.右连接和完整外部连接. 1)左连接:Left ...

  4. HDU 5504:GT and sequence

    GT and sequence  Accepts: 95  Submissions: 1467  Time Limit: 2000/1000 MS (Java/Others)  Memory Limi ...

  5. node - TypeError: argument handler must be a function 路由报错的原因

    原因 : 路由一定要暴露给外部使用   var express = require('express') var router = express.Router()   router.get('/', ...

  6. namenode节点无法自动切换主从

    当停掉主namenode节点,从节点无法切换到active状态,有两种可能导致这种问题 1.查看namenode上的zkfc日志,发现没有fuser命令,需要手动安装 yum install -y p ...

  7. 111-PHP类变量之间的赋值标识为同一个对象

    <?php class mao{ //定义猫类 public $age=0; //定义多个属性并初始化 public $weight=50; public $color='white'; } $ ...

  8. MacType

    #前言 这几天实在是嫌弃Win10垃圾的字体渲染效果--发虚模糊,索性从网上找了个系统字体渲染软件即MacType给系统字体改头换面. #使用效果 这里贴出两个场景的效果对比(单击图片查看具体效果) ...

  9. 干货分享:想要写好Proposal,这四个问题必须解决

    当大家确定了毕业论文选题之后,下一步就是着手写开题报告,也就是proposal.开题报告或者说是研究计划要回答四个问题:为什么这个问题重要,为什么这个问题很难解决,为什么现在要考虑解决这个问题,为什么 ...

  10. 报错盲注之exp注入(double数值类型溢出原理详解)

    首先感谢原文博主,在此致敬.本文转自:http://www.cnblogs.com/lcamry/articles/5509124.html Exp()为以 e 为底的对数函数:MySQL版本在 5. ...