前言

Java是一门面向对象的语言,那么问题来了,有人会问,老师,我没对象,我该怎么办,老师会发么还是要自己带,此对象非彼对象,今天我们一起来学习一下面向对象的编程思想。

面向对象编程(Object-Oriented Programming,OOP)

是划时代的编程思想变革,推动了高级语言的快速发展和工业化进程。OOP 的抽象、封装、继承、多态的理念使软件大规模化成为可能,有效地降低了软件开发的成本、维护成本和复用成本。面向对象编程思想是大型软件的开发就像搭积木一样隔离可控、高效简单,是当今编程领域的一股势不可挡的潮流。OOP实践了软件工程的三个主要目标:可维护、可重用和可扩展性

对象

万物皆对象,你所能看到的、摸到的、听到的都可以是对象。对象是一个自包含的实体,用一组属性 + 行为标识,谁拥有数据谁就拥有操作的方法。

面向对象的三大特性

封装

封装是一种对象功能内聚的表现形式,是功能之间的耦合度降低,更具有维护性。每个对象都包含他能进行操作所需要的所有信息,因此对象不必依赖其他对象来完成自己的操作

属性私有,对外提供可操作的方法

优点:

  • 减少耦合
  • 类内部实现可以自由的修改
  • 类有清晰的对外接口,外界不需要内的内部操作

示例:狗拥有叫这个属性,shout 属性私有,别的类通过 get  和 set 方法访问属性或修改属性

class Dog{private String shout= "汪汪汪";public String getShout(){return shout;}public void setShout(String shout){this.shout= shout;}
}

继承

继承使子类能够继承父类,获得父类的部分属性和行为,使得模块更具复用性

对象继承代表一种 a is A  的关系,a是子类,A是父类,也就是 a 是 A,狗 是 动物,狗 就 继承了动物。还可以理解为是对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备自己独有的特性。

继承定义了类如何相互关联,共享特。继承的工作方式是,定义父类和子类,或者说是基类和派生类,其中子类继承父类的所有特性。子类不但继承了父类的所有特性,还可以定义新的特性。

优点:

  • 继承使得所有子类的公共部分放在了父类,使得代码共享,避免重复
  • 继承使得修改或扩展而来的实现都比较容易

缺点:

  • 父类变子类也要跟着变
  • 父类的实现细节暴露给了子类,破坏了封装,增加了耦合(组合优于继承)

示例:狗和猫都是动物,狗 和 猫都继承了动物,狗会游泳,猫会爬树

class Animal{private String shout;public String getShout(){return shout;}public void setShout(String shout){this.shout= shout;}
}class Dog extends Animal{private String swim;}class Cat extends Animal{private String goTree;}

多态

多态使模块在复用性基础上更加有扩展性,使系统运行更有想象空间。

多态表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。子类可以使用 override 关键字,将父类实现替换为他自己的实现,这就是方法重写或者方法改写。

示例:动物都会叫,但是猫是喵喵喵,狗是汪汪汪,我们把shout 改成 方法

class Animal{String shout();
}class Dog extends Animal{@Overidepublic String shout(){System.out.println("汪汪汪");}}class Cat extends Animal{@Overidepublic String shout(){System.out.println("喵喵喵");}}

抽象(第四大特性)

对需求进行业务抽象和建模分析,通过模型组合去解决某一类问题。

上面我举得例子,动物其实是无法实例化的,猫和狗我们都能想象出来一个具体的物体,而动物是一类的统称,所以就延伸了抽象的概念 abstract。

抽象类通常代表一个抽象概念,他提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的,所以,在一个以继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝节点是抽象类。

梧高凤必至,花香蝶自来

参考文档:

无尘老师PPT

《大话设计模式》     --程杰

孤尽训练营打卡日记day17--面向对象相关推荐

  1. 孤尽训练营打卡日记day28--第四周总结

    前言 光阴似箭,日月如梭.转眼已经过去了一个月,孤尽训练营第四周也已经结束,今天我们一起来对这一周的内容做个简单回顾. 第一次课 单元测试和系统安全规约 什么是单元测试? 对软件组成单元进行的测试,其 ...

  2. 孤尽训练营打卡日记day14--第二周总结

    前言 光阴似箭,日月如梭!跟着孤尽老师学习的第二周也即将结束,训练营的日子也已经过去了一半.古人云,学而不思则罔,思而不学则殆.今天我们来对第二周的学习做个总结. 内容回顾 day08 首先,孤尽老师 ...

  3. 孤尽训练营打卡日记day24--系统安全规约

    前言 现在是大数据的时代,数据是非常重要的,一张照片就有可能泄漏了你的位置信息.在我们的系统中,安全一直是老生常谈的话题,怎么维护我们的系统安全,在我们日常开发中,怎么避免出现安全问题,我们跟着Joe ...

  4. 孤尽训练营打卡日记day04--MySQL优化

    前言 数据库在系统中是非常重要的一环,当数据量大的时候,数据库就会有瓶颈,也就是查询变慢,我们需要对数据库进行优化 建表时优化 Schema 和数据类型优化 整数 TinyInt,SmallInt,M ...

  5. 孤尽训练营打卡日记day19--OAuth2基础

    前言 我们现在的系统架构都是微服务的架构,也就是说,一个完整的功能,是由后台多个工程一起完成的.那么就会有一个问题,明明是多个工程,但是我们只需要登录一次,这是怎么实现的呢?今天我们跟着刘雪松老师一起 ...

  6. 利用油猴脚本显示扇贝网真实打卡日记

    本文首发在我的个人博客:https://jlice.top/p/7kmxm/.欢迎大家前去参观,么么哒~ 前一段时间发现扇贝网页版显示的打卡日记和手机上看到的不一致,感觉应该是网页版开发滞后的原因.这 ...

  7. day17 面向对象基础

    day17 面向对象基础 一.编程思想 1.编程思想:程序员在面对一个问题的时候首先想到的解决这个问题的想法 2.三种编程思想: 面向过程编程(穷人思想) - 会基本语法和逻辑 函数式编程(小资思想) ...

  8. 训练营打卡Day57

    训练营打卡Day57 文章目录 训练营打卡Day57 题121:[1143. 最长公共子序列](https://leetcode.cn/problems/longest-common-subseque ...

  9. 第三模块 面向对象网络并发编程 | day17 面向对象基础

    第三模块 面向对象&网络&并发编程 从今天开始,我们将进入系列课程第3个模块的的学习,此模块包含如下三大部分知识: 面向对象,Python中支持两种编程方式来写代码,分别是:函数式编程 ...

  10. 训练营打卡Day45

    训练营打卡Day45 文章目录 训练营打卡Day45 题105:[70. 爬楼梯](https://leetcode.cn/problems/climbing-stairs/) 思路 代码 题106: ...

最新文章

  1. 收藏 | 提高数据处理效率的 Pandas 函数方法
  2. (005)RN开发 js jsx ts tsx的区别
  3. 做网络推广浅析影响网站打开速度的因素,促进网站SEO优化效果提升!
  4. MySQL存储日志并使用Loganalyzer作为前端展示
  5. android gpio操作
  6. 数据结构实验之数组三:快速转置
  7. Vue实现仿音乐播放器7-实现音乐榜单效果
  8. 学霸网站-Beta版本发布说明
  9. Invocation failed Unexpected end of file from server java.lang.RuntimeException: Invocation failed U
  10. springboot mybatis 热加载mapper.xml文件(最简单)
  11. Linux常用命令一 查看系统负载 版本信息 工作目录
  12. Android瀑布流照片墙实现,体验不规则排列的美感
  13. 各种数字字体样式_来自中世纪建筑 文化的字体——————哥特式
  14. epub格式电子书编辑器
  15. 香农公式说明了什么_香农公式理解
  16. 跟着团子学SAP DMS—在SAP中通过DMS上传文档基本操作(CV01N/CV02N/CV03N/CV04N)
  17. 公众号后时代,暴涨100万粉丝、篇篇10w+是如何炼成的?
  18. MySQL 数据库重启
  19. 计算机主板维修高手,计算机电路基础与维修高手
  20. Eclipse的安装步骤

热门文章

  1. Kotlin细节十五:作用域函数与 this it 关键字
  2. OpenGL光源光照使用范例
  3. illegal TFTP operation
  4. element中form表单输入非负数验证
  5. MySQL 8.0 新特性之窗口函数
  6. The server encountered an unexpected condition that prevented it from fulfilling the request.(解决思路)
  7. 错误-The server encountered an unexpected condition that prevented it from fulfilling the request
  8. matlab画基因表达热图,科学网—使用pheatmap软件绘制基因表达热图 - 陈振玺的博文...
  9. 笔记本显示服务器未能登录,win10系统出现User profile service服务未能登录的解决方案...
  10. 《敏捷教练-如何打造优秀的敏捷团队》读书笔记