前言
从本文我们将开始《Java 大厂面试必刷题》系列的更新,Java 面试必刷题 Day1:何为面向对象编程的思想?面向对象三大特征是什么?这道题对于 Java 从业者来说简单是因为这是一道很基础的面试题,说有深度它又可以完全考察一个 Java 从业者对于面向对象编程这个重要思想的理解程度。一、何为面向对象编程的思想?
面向对象编程是利用类和对象编程的一种思想。
- 万物可归类,类是对于世界事物的高度抽象,不同的事物之间有着不同的联系,例如我们可以将猫、狗、虎归为动物类。
- 万物皆对象,对象是抽象世界的具体事物,例如动物类中的猫、狗、虎即为三个独立的对象。
二、面向对象的三大特征
在 Java 体系中我们将类的关系分为以下三种,即面向对象的三大特征:
- 一个类自身与外界的封装关系,说明一个类的行为、属性与其他类的关系,高内聚、低耦合。
- 一个父类与子类的继承关系。
- 一个类和多个类的多态关系。
2.1、封装关系
封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而言它的内部细节是隐藏的,暴露给外界的只是它的访问方法。类的封装关系可以具体划分为属性的封装和方法的封装:
- 属性的封装:使用者只能通过事先定制好的方法来访问数据,可以方便地加入逻辑控制,限制对属性的不合理操作。
- 方法的封装:使用者按照既定的方式调用方法,不必关心方法的内部实现,便于使用和修改,增强了代码的可维护性与复用性。
2.2、继承关系
继承是指从已有的类中派生出新的类,新的类既能吸收已有类的数据属性和行为,并能拓展新的能力。子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法。在本质上是特殊-一般的关系,即我们常说的 is-a 关系。
在知识表示、面向对象程序设计与面向对象设计的领域里,is-a(英语:subsumption,包含架构)指的是类的父子继承关系,例如类 D 是另一个类 B 的子类(类 B 是类 D 的父类)为 D is a B。
从多种实现类中抽象出一个基类,使其具备多种实现类的共同属性,当实现类用 extends 关键字继承了基类(父类)后,实现类就具备了这些相同的属性。继承的类被称为子类(派生类或超类),被继承的类叫做父类(或者基类)。例如从猫类、狗类、虎类中可以抽象出一个动物类,具有和猫、狗、虎类的共同特征(吃、跑、叫等)。
- Java 通过 extends 关键字来实现继承。
- 父类中通过 private 定义的变量和方法不会被继承,不能在子类中直接操作父类通过 private 定义的变量和方法。
- 继承避免了对一般类和特殊类之间共同特征进行的重复描述,通过继承可以清晰地表达每一项共同特征所适应的概念范围,在一般类中定义的属性和操作适应于这个类本身以及它每一层特殊类的全部对象。
- 运用继承原则使得系统模型比较简练也比较清晰,极大地提高了代码的可复用性。
2.3、多态关系
相比于封装和继承,Java 多态是三大特性中比较难理解的一个,封装和继承最后归结于多态,多态指类和类的关系,两个类有继承关系,存在有方法的重写,故而可以在调用时有父类指向子类对象,这也即为实现多态必备的三要素:继承、重写,父类引用指向子类对象。多态关系极大地提高了代码的可移植性与健壮性。
总结
在本文中我们描述了何为面向对象编程的思想?面向对象三大特征是什么?很多人都能简单的叙述其中的环节,但是我们更应该注重从设计模式方面进行分析,为什么要面向对象编程,这个思想有深度是因为里面包含了很多抽象的概念,我们要养成一个良好的编程素养,学会随着开发的深入循序渐进。我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!