5.1 面向对象和面向过程

面向过程是以过程为中心的,遇到问题时,想的是解决问题的步骤,然后用函数把步骤一一实现,最后再依次调用。面向过程更侧重于怎么做,以执行者的角度思考问题,比较适合解决小型问题或底层问题。

面向对象以对象为中心,遇到问题时,想的是需要哪些对象一起来解决问题,然后找到这些对象。并把它们组织在一起,然后取各家之所长来共同解决一个问题。面向对象更侧重于”谁来做”,以指挥者的角度思考问题,比较适合解决中大型问题。

面向对象具有三大特性:

封装

继承

多态

1.封装性

封装是面向对象的核心思想,它有两层含义,一是指把对象的属性和行为看成是一个密不可分的整体,将这两者“封装”在一起(即封装在对象中);另外一层含义指“信息隐藏”,将不想让外界知道的信息隐藏起来。例如,驾校的学员学开车,只需要知道如何操作汽车,无需知道汽车内部是如何工作的。

2.继承性

继承性主要描述的是类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展。例如,有一个汽车类,该类描述了汽车的普通特性和功能。进一步再产生轿车类,而轿车类中不仅应该包含汽车的特性和功能,还应该增加轿车特有的功能,这时,可以让轿车类继承汽车类,在轿车类中单独添加轿车特性和方法就可以了。继承不仅增强了代码的复用性、提高开发效率,还降低了程序产生错误的可能性,为程序的维护以及扩展提供了便利。

3.多态性

多态性指的是在一个类中定义的属性和方法被其它类继承后,它们可以具有不同的数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义。例如,当听到“Cut” 这个单词时,理发师的行为是剪发,演员的行为表现是停止表演,不同的对象,所表现的行为是不一样的。多态的特性使程序更抽象、便捷,有助于开发人员设计程序时分组协同开发。

5.2 类与对象

面向对象的世界观认为世界是由各种具有自己的运动规律和内部状态的对象所组成的,不同对象之间的相互作用和通信构成了完整的现实世界。使用面向对象的编程思想来分析问题需要从以下几个步骤思考。

根据问题需要,找到问题所针对的现实世界的实体。

从实体中寻找与解决问题相关的属性和功能,这些属性和功能就形成了概念世界的抽象实体。

把抽象的实体用计算机语言进行描述,形成计算机世界的类,即借助程序语言,把类构造成计算机能够识别和处理的数据结构。

类实例化成计算机世界中的对象,对象是计算机世界中解决问题的最终工具。

5.2.1 类与对象的关系

在面向对象中,为了做到让程序对事物的描述与事物在现实中的形态保持一致,面向对象思想中提出了两个概念,即类和对象。在Java程序中类和对象是最基本、最重要的单元。类表示某类群体的一些基本特征抽象,对象表示一个个具体的事物。类是抽象的,对象是具体的,类相当于创建对象的蓝图。面向对象的程序实现需要通过类创建对应的实例化对象,来对应客观世界中的实体。

例如,在现实生活中,学生就可以表示为一个类,而一个具体的学生,就可以称为对象。一个具体的学生会有自己的姓名和年龄等信息,这些信息在面向对象的概念中称为属性;学生可以看书和打篮球,而看书和打篮球这些行为在类中就称为方法。

在面向对象的思想中最核心的就是对象,而创建对象的前提是需要定义一个类,类是Java中一个重要的引用数据类型,也是组成Java程序的基本要素,所有的Java程序都是基于类的。将一组具有相同属性和功能(或行为)的对象归类抽象出类的概念,那么应怎么用Java语言来定义这个类呢?定义类的简单语法格式如下:

class是定义类的关键字,类名就是一个标识符。

类可以包含3种最常见的成员,即属性、构造器、方法,类中各个成员的排列顺序不同是没有任何影响的,但是习惯上人们会按照属性、构造器、方法的顺序去定义。

属性用来描述对象的数据特征,如姓名、年龄、颜色、价格等。同一个类的实体意味着有相同的数据特征,但每个对象的属性值都是独立的。

构造器用来创建和初始化对象。如果不定义任何构造器,那么编译器会自动生成一个默认的构造器。

方法用来描述对象的功能(或行为),调用对象的方法就是让对象完成一个动作或执行某个功能。

5.2.3 对象的创建

有了类就可以创建对象了。Java语言通过new关键字来创建对象的