面试官提问:什么是面向对象? 谈谈你对面向对象的理解

面试题拆解:

这道面试题对于工作时间不是很长的Java程序员来说,出现频率是比较高的。

那么到底什么是面向对象呢?讲面向对象之前,需要先聊一下面向过程,并聊聊两者的区别。

再从面向对象的角度出发,聊聊面向对象的三大特性:封装、继承、多态。

面试题回答

下面是面试君对于这个面试题的回答,不一定全对,可具有一定的参考借鉴意义:

面试官你好,我来回答一下这个问题,对于什么是面向对象,它是一种编程思想。聊到面向对象,我们需要聊一下面向过程的编程方式,因为面向对象是从面向过程过渡而来的。

以实际生活的案例来举一个例子,比如说洗衣服。

如果是面向过程的话,我们会将这个洗衣服任务拆解成一系列的步骤,每一个步骤就是一个函数。

  • 第一步,打开洗衣机;

  • 第二步,放衣服和洗衣液;

  • 第三步,选择洗衣模式,开始洗衣;

  • 第四步,等待洗完,拿出衣服。

如果是面向对象的编程方式,我们会拆分成人和洗衣机两个对象,再分析每一个对象,它需要做哪些事情。

人在其中需要做这三件事:

  • 第一件打开洗衣机

  • 第二件是放衣服和洗衣液

  • 第三件事是洗完衣服后拿出衣服。

洗衣机在其中只需要做一件事情:

  • 根据洗衣模式洗衣服。

在这个例子中,我们能够看出来面向过程跟面向对象,是两种不同的思维方式,处理问题的思考的角度不一样。

面相过程的思维方式,它更加注重这个事情的每一个步骤以及顺序。他比较直接高效,需要做什么可以直接开始干。

面向对象的思维方式,它更加注重事情有哪些参与者,需求里面有哪些对象,这些对象各自需要做些什么事情。将其拆解成一个个模块和对象,这样会更易于维护和拓展。

这个是面向过程跟面向对象的区别。

面向对象的三大特性:封装、继承和多态。

说到面向对象的话,一定要说到它的三大特性。

面向对象的第一大特性:封装

什么是封装呢?

通过访问修饰符(如 private)来修饰成员变量和成员方法,将不需要对外提供的内容都隐藏起来,提供公共方法对其访问。

封装的好处是:

  1. 隐藏实现细节,提供公共的访问方式

  2. 提高了代码的复用性

  3. 提高安全性

封装的意义在于,将内部的实现细节隐藏起来,对外部的调用者来说是透明的,调用者也不用关心它内部是怎么实现的,只需要知道这个方法是干什么的就好。

面向对象的第二大特性:继承

什么是继承呢?

在 Java 中子类使用关键词 extend 去继承父类的关系。

继承主要用途是将子类存在共性的东西,把它抽取出来放到父类里面,比如将共同拥有的属性和方法抽取出来放到父类里面。

继承的好处:

  1. 想要使用这些属性和方法的时候,可以直接去使用父类的,而不需要自己再重新去定义,更大程度的实现代码复用。

  2. 我们不需要写很多的冗余的代码,把共性的全部抽到父类,可以直接调用,如果需要个性化自定义子类的方法时,去重写父类的方法即可。

面向对象的第三大特性:多态

什么是多态呢?

多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作

多态的理解稍微有点抽象,解释一下:

多态是和继承一脉相承的,多态存在的需要有三个必要条件:继承、重写、父类引用指向子类对象。

用个案例再补充解释一下:

比如说打印机,它属于一个父类,有一台彩色打印机,属于子类,有一台黑白打印机,也属于子类。

打印机的关系

用这个案例来解释一下多态,以及多态存在的三个必要条件:

  1. 继承,彩色打印机和黑白打印机都继承自打印机这个父类;

  2. 重写,打印机有一个打印的方法,彩色打印机和黑白打印机会重写父类的打印的方法,效果就是,彩色打印机打印出来的效果是彩色,而黑白打印机打印出来的效果是黑白的。

  3. 父类引用指向子类对象,例如:Parent p = new Child() ;对应到打印机的案例,new 一个对象的时候,父类打印机的引用会指向具体的对象,彩色打印机或者黑白打印机。

多态的好处:

便于接口的维护和拓展,可以将某一个子类切换成其他的子类,代码不需要做任何的改变,具有可替换性。

多态的弊端:

只有是子类重写的父类的方法,父类才可以调用,但如果子类的方法不是重写父类的,而是子类独有的,那么这个时候多态就使用不了,这个是需要注意的点。

最后的话:

这是在Java中一道很经典的一个面试题,什么是面向对象,那么谈谈你对面向对象的理解。

需要掌握面向过程和面向对象的区别,这样就理解了什么是面向对象。

另外需要掌握面向对象的三大特性:封装、继承、多态,并聊聊分别是什么意思和它们的好处。

掌握这些知识的话,那么针对这个题目,相信可以做出一个让面试官相当满意的回答。

需要更多教程,微信扫码即可
      

别忘了扫码领取资料哦
          【高清Java学习线路图】和【全套学习视频及相关资料】

什么是面向对象? 谈谈你对面向对象的理解相关推荐

  1. Java面试一百道题目(第一题)-什么是面向对象,谈谈你对面向对象的理解

    Java面试一百道题目(第一题) 1,什么是面向对象,谈谈你对面向对象的理解. 思路:用面向过程和面向对象做对比来突出什么是面向对象. 答:高级语言分为,面向对象语言和面向过程语言,面向过程语言,距离 ...

  2. 谈谈我对面向对象以及类与对象的理解

    对于刚接触JAVA或者其他面向对象编程语言的朋友们来说,可能一开始都很难理解面向对象的概念以及类和对象的关系. 面向对象 首先,一言不和先百度,得到如下定义: 一切事物皆对象,通过面向对象的方式,将现 ...

  3. 面向对象思想--谈谈你对面向对象的理解

    面向对象 面向对象编程,即OOP,面向对象的概念和应用已经超越了程序设计.软件开发领域,现在已经发展到了各个领域. 面向对象可以说是对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段的产物. ...

  4. python登录面向对象_python基础之面向对象

    面向对象编程 面向过程编程:根据业务逻辑从上到下写代码,主要突出在流程上 函数式编程:将某些功能封装在函数里,日后不用重复编写,仅调用函数即可 面向对象编程:对函数进行分类和封装,让开发"更 ...

  5. JS面向对象一:MVC的面向对象封装

    JS面向对象一:MVC的面向对象封装 MDNjavascript面向对象 面向对象(Object-Oriented) 面向对象里面向的意思是以...为主,面向对象编程既以对象为主的编程. 面向对象的一 ...

  6. [.net 面向对象编程基础] (13) 面向对象三大特性——多态

    [.net 面向对象编程基础] (13) 面向对象三大特性--多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...

  7. python面向对象生动讲解_Python面向对象语法精讲

    本专题的内容结构: 第一部分主要是:面向对象基础 第二部分主要是:面向对象进阶 第一部分的结构: unit1:面向对象编程模式: (1),面向对象编程思想 (2),面向对象的三个特征 (3),Pyth ...

  8. 笔记整理-信息系统开发基础-面向对象分析与设计-面向对象设计的基本任务

    面向对象设计的基本任务,把面向对象分析模型转化为面向对象的设计模型,具体包括以下任务:设计人员必须完成以下任务:设计用例实现方案.设计技术支撑设施.设计用户界面.精化设计模型. 面向对象的分析模型主要 ...

  9. 什么是对象,为什么要面向对象,怎么才能面向对象?

    一. 面向对象,这个对象到底是什么? 这个对象不是C#中的实例,C#中我们把一个类的实例也叫做对象,这种对象严格的说应该是面向对象的编程实现(OOP)中的对象,面向对象编程,也不是面 向类的实例编程. ...

最新文章

  1. ant design后台模板-1.前端环境搭建
  2. vue中的keep-alive
  3. 篇幅达2840页、目录就有31页,这位华人小哥的博士论文堪比教材
  4. 织梦dedecms转WordPress方法(脚本一键转换)
  5. 语法分析程序的设计与实现_编译工程7:语法分析(5)
  6. Python字典对象实现原理
  7. dpdk优化(转)???
  8. mysql 升级 乱码_mysql3升级到mysql5解决乱码心得
  9. Vue异步获取数据后初始化数据不能及时更新
  10. 玩机搞机---mtk芯片机型线刷救砖的一些基本解决方法和步骤解析 mtk报错代码 SP_Flash平台刷机
  11. 用 Python 打造属于自己的GUI图形化界面
  12. 全面了解风控数据体系
  13. 叉积 微分 恒等式_单摆-微分方程浅谈
  14. 从顶点覆盖(Vertex Cover)到碰撞集(Hitting Set)的归约
  15. python识别人脸的年龄和性别_人脸识别是如何判断性别和年龄的?
  16. pycharm安装lxml提示ERROR: b'xslt-config' \xb2\xbb\xca\xc7\
  17. oracle已经创建表空间不存在,oracle表空间的创建、删除、查看、表空间不存在、及修改默认表空间详解...
  18. Maya快捷键学习游戏的方法有很多,但是自学和老师带是不一样
  19. 如何编写保护视力的chrome浏览器插件
  20. Mac系统配置环境变量保姆级教程

热门文章

  1. 苹果8屏幕测试软件,iPhone 8 Plus防摔测试:屏幕很硬 背面较弱
  2. 计算机cpu如何,计算机CPU如何保养
  3. java 使用反射动态赋值
  4. android 渐变的背景色,Android开发——实现背景颜色渐变效果-Go语言中文社区
  5. 惊艳面试官-Java中关于随机数生成8种方式的思考
  6. 为什么你要做国外调查问卷?
  7. oracle 强制索引 hint,oracle常用hint详解
  8. 计算机组装维护课后题,计算机组装及维护课后习题.doc
  9. 【矩阵论笔记】内积空间定义、长度、Cauchy-Schwartz、三角不等式
  10. ThingsBoard架构及技术栈