面试官:说一说你对面向对象的理解
我:下面我来回答一下我对面向对象的见解,首先面向对象是一种编程思想,聊到面向对象我们需要谈一下面向过程,因为面向对象是基于面向过程过渡而来的。
以实际生活的案例来举一个例子,比如说用洗衣机洗衣服。
如果是面向过程的话,我们会将这个洗衣服任务拆解成一系列的步骤,每一个步骤就是一个函数。
第一步,打开洗衣机;
第二步,放衣服和洗衣液;
第三步,选择洗衣模式,开始洗衣;
第四步,等待洗完,拿出衣服。
如果是面向对象的编程方式,我们会拆分成人和洗衣机两个对象,再分析每一个对象,它需要做哪些事情。
人在其中需要做这三件事:
第一件打开洗衣机
第二件是放衣服和洗衣液
第三件事是洗完衣服后拿出衣服。
洗衣机在其中只需要做一件事情:
根据洗衣模式洗衣服。
在这个例子中,面向过程注重做事情的步骤,一步一步做。
面向对象注重做事情有哪些参与者,这些参与者各自干了什么,拆解成一个个模块,方便应用的维护。
这就是面向对象与面向过程的区别,此外,面向对象有三大特性,封装,继承,多态。
封装是将类的属性和方法用private修饰,只允许本类可见,对于外界只提供访问的接口,隐藏了其实现的细节。这样做的好处就是:
- 可以隐藏内部细节,对外提供公共访问方式。提高代码安全性。
- 还有就是提高了代码的复用性。
继承就是将子类存在共性的东西,把它抽取出来放到父类里面,比如将共同拥有的属性和方法抽取出来放到父类里面。通过extends关键字来继承父类。
这样做的好处:
- 想要使用这些属性和方法的时候,可以直接去使用父类的,而不需要自己再重新去定义,更大程度的实现代码复用。
- 如果个性化定制子类方法时,直接重写父类中的方法即可。
继承的好处:
想要使用这些属性和方法的时候,可以直接去使用父类的,而不需要自己再重新去定义,更大程度的实现代码复用。
我们不需要写很多的冗余的代码,把共性的全部抽到父类,可以直接调用,如果需要个性化自定义子类的方法时,去重写父类的方法即可。
多态通俗来讲就是相同类型的变量,调用同一个方法时呈现出多种不同的行为特征。
存在多态需要三个条件:继承,重写,父类引用指向子类对象。
多态的好处使代码变得更加简洁。