Java :面向对象

直面Java 第001期

什么是面向过程

面向过程是以函数为中心,要解决一个问题,需要把问题分解为一个个的步骤,然后定义一系列的流程,用特定的输入经过函数的处理,最终输出特定的结果。

什么是面向对象

面向对象是对象为中心,对每一个步骤抽象形成对象,在对象中封装好需要解决问题的方法,强调了代码的复用。

两者的区分

比如说现在要实现一个开车的功能。

对于面向过程来说,实现驾驶员开车,需要定义一系列的流程,比如说挂挡 -> 踩离合 -> 踩油门等等,此外如果现在有一个其他的车,就需要重新定义一下流程。

对于面向对象来说,实现这个功能,可以先定义一个基本的车类型,封装一些共有的属性和方法,然后定义一个特定的车类型,在其中定义驾驶这个车需要的方法,以后要用的时候直接调用这个对象的方法就可以了,如果有其他的车需要驾驶,也可以通过继承来公用一些都有的属性方法,增加了代码的复用性。

三大基本特征

封装

就是把一个对象所拥有的属性和方法融合进一个结构中,对外只显示定义者想给外界看的东西。

对于属性,比如说一个车,可能会有大小,材质,颜色等属性,一般不直接对外公开,提供一个方法来决定给外界什么的属性操作权限。

对于方法,比如说车中会有前进、后退、转弯等方法,一般是用来定义这个对象的一些操作行为,提供给外界使用。

继承

通过A类继承来继承B类,使得A类来重用一些B类的属性和方法。

例如一开始定义了一个车子类型,里面有所有车子都有的颜色,材质等属性,前进、后退等行为,现在有一个私家车类型,只要继承了前面的车类型,就已经拥有了父类所定义的这些,还可以重载来使得其变得拥有自身的属性方法。

多态

多态一般通过类继承和接口实现指向子类来实现,使得通过父类引用来操作子类对象。

# 这样就可以用父类的引用来调用子类
Vehicle vehicle = new Vehicle();
vehicle.move();

五大基本原则

单一职责原则

一个类应该有且只有一个去改变它的理由

比如说求一个图形的面积并返回给用户,这个方法需要定义如何求面积和如何返回的话,就违反了「单一职责原则」,日后如果返回格式变了,就需要重新定义方法,就违背了原则.因此我们只需要定义求面积,具体如何返回,交给其他的方法来操作.

开放封闭原则

对象或实体应该对扩展开放,对修改封闭。

对于求一个图形的面积,如果我们已经定义好了,此时需要求其他的图形,不能在原先定义的方法里面修改,应该拓展一个其他方法来求解.

里式代换原则

对父类的调用同样适用于子类

子类应当可以替换父类并出现在父类能够出现的任何地方.因为父类拥有的东西子类都有,因此可以替换。

接口隔离原则

不应强迫客户端实现一个它用不上的接口,或是说客户端不应该被迫依赖它们不使用的方法

对于一个立体图形来说,拥有求体积的的功能,现在有一个平面图像,就不能实现这个接口,因为平面图形不求体积。

依赖反转原则

高层次模块不应依赖于低层次模块。

应该把低层次模块中的特定功能抽象成接口,然后实现这个接口,这样高层模块就可以调用接口来实现解耦,日后低层次模块修改了,高层次模块不用改变。

参考资料:

  1. http://blog.jobbole.com/86267/
  2. Hollis知识星球

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

  1. JAVA面向对象

    JAVA面向对象 对象   我们生活中能看到能摸到的一切事物都是对象.在程序中模拟出生活中的所有东西万物皆对象   只要是对象--属性和行为(方法)   属性   对象有什么   例如:学生有姓名.学 ...

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

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

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

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

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

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

  5. Java面向对象:接口

    Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...

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

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

  7. java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final

    一.前言 一直以来都是拿来主义,向大神学习,从网上找资料,现在就把自己在工作中和学习中的所理解的知识点写出来,好记星不如烂笔头,一来可以作为笔记自己温习,二来也可以给走在求学之路的同学们一点参考意见, ...

  8. 20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》

    20145212 实验二< Java面向对象程序设计> 实验内容 单元测试 三种代码 伪代码 百分制转五分制: 如果成绩小于60,转成"不及格" 如果成绩在60与70之 ...

  9. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  10. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

随机推荐

  1. [BZOJ1878][SDOI2009]HH的项链 莫队

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1878 不带修改的莫队,用一个桶记录一下当前区间中每种颜色的数量就可以做到$O(1)$更新了 ...

  2. 怪物猎人OL简单测评与碎碎念

    请移步我的个人网站查看: www.wuduojia.cn

  3. Python学习 Day 4 函数 切片 迭代 列表生成式 生成器

    定义函数 def my_abs(x):#求绝对值的my_abs函数 if x >= 0: return x else: return –x def nop():#空函数 pass#占位符 参数检 ...

  4. Ghost Win10系统X64位和32位10041装机版下载

    更多系统下载尽在系统妈:http://www.xitongma.com 特别说明: 1.C:盘分区须至少15GB(安装过程有大量的解压临时文件),安装完成后C:盘占用10GB左右! 2.安装之后如有硬 ...

  5. iTOP-4418/6818开发板支持锂电池供电方案

    iTOP-4418/6818开发板支持的是官方推荐的AXP228电池管理,动态调频,更稳定可靠,支持充放电电路与电量计(库化计), 广泛应用于各种电子产品中. 4418开发板中锂电池充放电接口,适用于 ...

  6. leetcode_Counting Bits_dp

    给定num,用O(num)的时间复杂度计算0--num中所有数的二进制表示中1的个数. vector<int> countBits(int num) { vector<,); ;i& ...

  7. iview构建 初始化的时候不要装ESlint 太烦人了

    iview构建 Node.js Vue(全局安装) npm install -g vue-cli npm install vue-cli 问题:发现如果不全局安装VUE-cli,\n在它初始化的时候, ...

  8. JavaSE-12 面向对象程序设计的几条基础原则

    摘取代码中变化的行为,形成接口 在设计基类的时候,如果该类某个成员方法在子类中的实现变化差别比较大(一部分子类实现该方法是相同的),作为基类有两个问题:一是该方法不再通用:二是子类如果重写该方法,存在 ...

  9. LeetCode(63)Unique Paths II

    题目 Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. Ho ...

  10. UVa 122 树的层次遍历

    题意: 给定一颗树, 按层次遍历输出. 分析: 用数组模拟二叉树, bfs即可实现层次遍历 #include <bits/stdc++.h> using namespace std; st ...