在第一章曾经简单介绍过,在面向对象的世界里,一切事物皆对象,当解决一个问题的时候,我们先会考虑这个问题会涉及到哪些事物,然后把事物抽象成类,当时还画了一张图如下:
从本章开始,我们一点一点来剖析类的世界,带领大家一起进入类的海洋。
其实在现实世界当中,类并不陌生。比如我们把自己称为人,把花花草草称为植物,把用的手机电脑称为电器,把坐的汽车地铁称为交通工具等等。这些称呼其实就是在把事物进行分类。有的时候,还会根据特定的需要,把这些事物往下进行细化或往上进行抽象,例如把手机称为手持设备(手持设备属于电器的一类),把人和植物统称为生物等等。图示如下:
我们之所以这么分类,是因为同一类事物具有一些相同的属性和行为。比如手机有型号、颜色、屏幕尺寸等属性,可以打电话、播放视频、玩游戏等功能。
程序就是用来解决现实世界的问题的,程序语言经历了从低级语言到高级语言的进化,为了更加贴近人的思维方式,因此高级语言也把问题中涉及到的具有相同属性和行为的事物抽象成类。Java作为一种高级语言,当然也不例外。
在Java中,我们所有的代码都是位于某一个类中的。标准的类库中提供了上千个类,可以用于各种各样的功能。在程序中,我们把事物抽象成类的过程,可以称之为封装。说白了,封装就是把属性和行为包装到一个类中,对使用者隐藏属性存储的细节和行为实现的细节,只提供使用的API文档。例如我们买一部手机,会提供给我们一份说明书,这个说明书就是API文档,我们照着说明书就会使用这部手机了。
类也可以向下细化成更小的类,这个过程称为继承。其实,在Java中,所有的类都直接或间接继承自一个超级类:Object。关于继承,我们后面还会详细探讨。
通过上面的分析,我们知道,类具有3个主要要素:名字、属性、行为。在Java中,我们把行为称之为方法。例如手机类:
你们中估计好多都没有搞对象吧?嘿嘿。我现在带你到Java中来搞。前面提到了手机类,但是这个分类在现实世界中怎么体现呢?例如笔者有一部荣耀V20,蓝色的外壳,6.1寸的屏幕。我媳妇有一部红色iphone11,也是6.1寸屏幕。这2部手机是实实在在存在的、看得见、摸得着的具体事物,它们就是手机类的具体体现,我们称之为手机类的对象。
类可以理解为构造对象的模板,是一种抽象定义。对象是类具体化后实实在在存在的事物。在程序中,通过类,可以创建出具体的对象,这个过程叫做构建类的实例,对象既然是类的实例,因此它会把类的3个主要要素具体化:
我们用图描述一下:
从上图我们可以看出:
通过上面的讨论,我们搞清楚了什么是类,什么是对象,类和对象的关系。那么我们如何使用一个类呢?我们知道,我们想要看电视,首先得去买一台电视机(除非你能自己造一台)。同理,一般我们想要解决问题,先从JDK提供的类库里找,看看有没有满足我们需求的类,如果没有,我们再自己创建(当然,现在Java已经非常火爆,开源的类库琳琅满目,只有你想不到的,没有你找不到的)。接下来的小节我们会通过一个非常常用的类来学习如何使用一个类。