4.9 面向对象的四个基本特性
扫码看视频
在面试的时候可能会被问到:面向对象有几个基本特性,分别是什么?面向对象有四个基本特性:抽象、封装、继承和多态性。
1.抽象
抽象就是忽略问题领域中与当前目标无关的方面,只关注与当前目标有关的方面。例如,同样是学生对象,在学生成绩管理系统中,我们只关心他/她的学号、班级、成绩等,而他/她的身高、体重、血型这些信息则不需要去关注。如果切换到校医院信息系统,则学生对象就需要关注他/她的身高、体重、血型这些信息了。
抽象包括两个方面:过程抽象和数据抽象。
过程抽象是指任何一个明确定义了功能的操作都可以被抽象为一个对象来看待,尽管这个操作实际上可能由一系列更低级的操作来完成。例如,驾驶汽车这个操作可以抽象为,人这个对象对汽车这个对象的操作。
数据抽象定义了数据类型与施加于该类型对象上的操作,并限定了对象的值只能通过使用这些操作修改和观察。例如,人这个对象的身高和体重只能通过吃和运动等方法来修改。
2.封装
前面我们已经介绍过封装,它是对象和类概念的主要特征。封装把数据和操作过程封装在一起,对数据的访问只能通过已定义的接口(如第4.5节介绍的get/set方法)。面向对象计算始于一个基本概念:即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过接口访问其他对象。一旦定义了一个对象的特性,就有必要决定这些特性的可见性,即哪些特性对外部世界是可见的,哪些特性用于表示内部状态,在这个阶段定义对象的接口。通常禁止直接访问一个对象的内部实现,而应该通过操作接口来访问对象,这称为信息隐藏。事实上,信息隐藏是用户对封装性的认识,封装则为信息隐藏提供支持。封装保证了对象具有较好的独立性,使得程序修改和维护更为容易,对应用程序的修改仅限于类的内部,因而可以将应用程序修改带来的影响降低到最低限度。
3.继承
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从原有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类、超类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法,使之更适合特殊的需要,这也体现了大自然中一般与特殊的关系。继承很好地解决了软件的可重用性问题。例如,所有的Windows应用程序都有一个窗口,可以将它们看作都是从一个窗口类派生出来的,但是有的应用程序用于文字处理,有的应用程序用于绘图,这是因为派生出了不同的子类,各个子类添加了不同的特性。
4.多态性
多态性是指不同类的对象对同一消息做出不同的响应。例如,同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同;又如,同样的复制-粘贴操作,在字处理程序和绘图程序中肯定有不同的效果。
多态性在程序运行期间根据对象的实际类型来调用该类的方法,从而在不修改源代码的情况下就可以改变运行的结果,增强了扩展性和灵活性。