第3章 进入对象的世界
3.1 面向对象思想
扫码看视频
诚然,Java最吸引人的特征莫过于其面向对象编程了。简单来说,面向对象编程(Object Oriented Programming,OOP)就是描述对象与对象之间的相互作用。
回想一下,在C语言这种面向过程的语言大行其道的日子里,我们要编写一个程序,通常要思考:怎么一步一步地达成目标。就像那个“把大象放进冰箱”的笑话一样,我们编写程序的思维模式就是:打开冰箱门,把大象放进冰箱,然后把冰箱门关上。
到了Java这里,一切都变了,就像面向对象程序设计语言Smalltalk的发明人之一Alan Kay所说的那样:“万物皆对象。”也许你要问了,什么是对象?好,静下心来,环顾一下四周,其实你正处在一个对象的世界中,你手中的这本书就是一个对象,头顶的灯也是,只不过我们在日常生活中并不使用这种思维方式罢了。
对象里有什么呢?用日常语言来讲,对象有状态和行为。举个例子,拿头顶的灯来说,它的状态就是:灯的功率为100瓦;它的行为是:灯可以被点亮。回到Java的世界,对象的状态就是变量,对象的行为就是方法(或者称为函数)。
不能不佩服人类的总结和归纳能力,它可以让我们认识到不同物体的共同点。就拿手中的书来说吧,每本书都不相同,但是它们都有共同的特点:上面有文字,有图,我们可以从中学到知识。人们很善于给事物分类,从生物学的物种分类:界、门、纲、目、科、属、种,就可以看出来。
在面向对象世界中,也有类这个概念,这也正表现了人们善于分类的习惯。我们可以把相似的对象划归为一个类来描述。在软件中,类是对象的模板,可以根据类这个模板来大量创建对象。自然,我们可以总结出这样一个关系:类(Class)是对象(Object)的模板,对象是类的实例(Instance)。
对于类与对象的关系理解起来可能有些困难,下面举个例子来让这个概念更加实际化一些。劳累了一天的张三,回到家想找个沙发坐下,于是他坐在了客厅的沙发上。好了,在前面的句子中出现了两个“沙发”,而这两个沙发代表了不同的意思。第一个“沙发”是张三在脑子里想的,它是张三脑子中的一个概念,在面向对象中这个“沙发”可以被认为是类。而第二个“沙发”是一个名副其实的实物,它就放在客厅,在面向对象中,这第二个“沙发”可以被认为是对象。类是一个抽象的概念,而对象是一个实际存在的事物,占据着一定的空间。