面向对象

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

  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. xilinx FPGA课程学习总结

    一时冲动,跑步进入了FPGA的大门,尤老师是教练,我之前一直做嵌入式软件,数字电路也是十年前大学课堂学过,早已经还给老师了.FPGA对于我来说完全是小白,所以.老师的课程,对于我来说至关重要!因为见过 ...

  2. [题解] LuoguP2257 YY的GCD

    传送门 给\(n,m\),让你求 \[ \sum\limits_{i=1}^n \sum\limits_{j=1}^m [\gcd(i,j) \in prime] \] 有\(T\)组询问\((T \ ...

  3. class(二)--派生类的继承

    前言 从我之前的一篇笔记对象的继承中, 我们可以知道JS的继承方式依赖原型链,而比较好的继承方式是寄生组合式继承 先来温习下什么是寄生组合式继承 function Rectangle(length, ...

  4. Git 的 4 个阶段的撤销更改

    虽然git诞生距今已有12年之久,网上各种关于git的介绍文章数不胜数,但是依然有很多人(包括我自己在内)对于它的功能不能完全掌握.以下的介绍只是基于我个人对于git的理解,并且可能生编硬造了一些不完 ...

  5. Day 31:CSS选择器、常用CSS样式、盒子模型

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 入门QT5 D1 Widget的移动

    又重温了一遍C++之后来看QT教程了.QT之前也看过,不过都是很长时间之前了,一直也用到. 反过来再一学,这是和学新的是一样一样的. 首先创建新项目. 1.点击NEW PROJECT 2.Applit ...

  7. 三十一、SAP中的循环和判断图标和表格的混用

    一.代码如下 二.显示结果如下

  8. HDU 4901 多校4 经典计数DP

    RT 最近不想写博客,累积了一周多的题目,今天趁着周日放假,全部补上吧 dp[i][j]表示前i个数,操作后的值为j的总个数 注意取或不取,有种完全背包的意味.因为数字小于1024,所以异或的结果也绝 ...

  9. ISO处理jq事件

    jq事件在IOS上,如果标签本身不具备某些功能,而我们通过document或者body绑定上去的话,有些事件是不起作用的,同时在IOS上jq事件也存在延迟. 事件不起作用 这里点击事件为例,在IOS中 ...

  10. css mix-blend-mode 颜色滤镜混合模式

    CSS3混合模式种类 在CSS3混合模式中,目前仅有16种:normal,multiply,screen,overlay,darken,lighten,color-dodge,color-burn,h ...