0、前言
本章节,我们主要介绍一下关于面向对象编程(Object-oriented programming,OOP)里面的一些基本概念。熟悉这些概念,有助于我们理解 Java 语言里面的一些编程逻辑。
首先,我们需要明确一个基本道理:计算机语言是人类和计算机沟通的桥梁,机器是无法理解现实世界事物的。因此,我们在进行编程处理时,需要将现实世界的事物,在逻辑上抽象处理,并转换为计算机能识别的计算机语言信息。
在面向对象编程的基本概念里面,主要有4个重要基础概念:属性(Attribute)、方法(Method)、类(Class)、接口(Interface)。下面将围绕这4个基本名词进行讲解。例图如下:

1、关于属性(Attribute)
属性是一个类的一部分,用于指示关于此类的一些特性。比如,上图的“学生类”,有2个属性,分别为:学号、名称。这些属性,一般是通过对于问题域的事物,进行抽象建模所得出的。
2、关于“方法(Method)”
方法(有些文章也称为函数)是一个类的一部分,比如上图的“学生类”,有3个方法,分别为:说话、说中文、说英文。方法主要反映此事物的一些功能。比如,上图中,“说英文”是学生类的一种功能。
3、关于“类(Class)”
“类(Class)”这个名词,在字面意思上就是对于事物的一种统称。我们可以简单的理解为一种分类。比如:“人”是一种分类,“中国人”也是一种分类。

如图所示,人类这个分类,派生出了中国人、美国人;中国人这个分类派生出了广东人;广东人派生出了广州人。
这里,我们可以看出分类之间,可以有上下级关系。在计算机逻辑上,我们将其称之为:继承。在继承关系中,上级称为父类,下级称为子类。以上图为例:“中国人”是人类的子类;也同时是“广东人”的父类。
那么,说到继承,一个子类能不能有多个父类呢?这个答案是肯定的。

从上图我们可以看出,“混血儿”这个分类,可以同时是“中国人”以及“美国人”的子类。在逻辑上,继承的主要作用,是让子类天然继承父类的功能和属性,从而让子类的定义更统一和简约。
这里我们可能会涉及到另外2个名词:单继承 和 多继承。故名思意,单继承即一个类最多只能有一个父类;多继承即一个类可能有一个或者多个父类。至于,他们的优劣,下面简单介绍一下:
l 单继承:优点在于类层次结构的清晰,设计上更容易把握;缺点实在丰富度要求较高和较复杂的情况下,单继承从设计结构上没办法满足。
l 多继承:优点在于由于可以同时具备多个父类的特征,可以让子类拥有更高的丰富度;而缺点是类的继承结构会变得复杂,而且可能会出现菱形继承的风险;
注意:
1) 在 C++ 语言中,父类和子类之间可以多继承;在 Java 语言中,父类和子类只能单继承。
2) 菱形继承问题:如上图中的人类、中国人、美国人、混血儿4个类的关系就有菱形问题。如果人类有一个功能叫“说话”,而中国人、美国人都实现了这个功能,那么混血儿所继承的是谁的说话功能?中国?美国?
4、关于“接口(Interface)”
其实,在很多现代的计算机语言的设计中,都避免了菱形继承问题。比如,在Java中,通过设计”接口类”来解决。
“接口类”在面向对象中是一种特殊的存在,它不能定义属性,只能定义功能方法的名称,而且功能方法也不能写具体代码,只是一个空壳。在管理上,大家通过实现(implement)“接口类”中定义的抽象方法,而达到规范管理子类的功能。

如上图所示,定义了3个接口类,“人类”、“中国人”、“美国人”。它们都有自己的抽象功能函数。“混血儿”这个类,实现了3个接口类。然后,学生继承了混血儿这个类。这种以“接口类”规范功能方法,然后以单继承的方式实现业务处理的处理方式,在Java语言中,是普遍存在的。
5、例外知识
不管是面向对象,还是面向过程,我们对于资源的管理都是采用“包”的形式来管理。“包”其实就是一个文件夹。在Java中,以域名的逆序来命名包名。比如:域名为 www.baidu.com 的企业,其包的根名为 com.baidu.