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

面试题拆解:

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

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

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

面试题回答

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

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

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

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

  • 第一步,打开洗衣机;

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

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

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

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

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

  • 第一件打开洗衣机

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

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

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

  • 根据洗衣模式洗衣服。

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

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

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

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

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

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

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

什么是封装呢?

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

封装的好处是:

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

  2. 提高了代码的复用性

  3. 提高安全性

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

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

什么是继承呢?

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

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

继承的好处:

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

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

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

什么是多态呢?

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

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

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

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

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

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

打印机的关系

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

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

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

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

多态的好处:

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

多态的弊端:

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

最后的话:

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

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

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

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

   需要更多教程,微信扫码即可
      https://img-blog.csdnimg.cn/36598bbae0d34abfba6dba02991cac9f.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6a2P5p2l56CB5Yac,size_20,color_FFFFFF,t_70,g_se,x_16  

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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐