类和对象是Java语言的重要概念,如何理解它们和应用它们,也是OOD和OOP的关键。
打个比方,若说类是图纸,那么对象就是按着图纸构造出来一个个实体;若说类是模型,那么对象就是根据模型生产出来的一个个产品;若是类是人,那么对象就是张三、李四、王五等实实在在的个体。通过这样的一个比方,想必对什么是类,什么是对象,以及类与对象的关系应该有了些认知。实际上,类就是对于某种有着共同属性和行为的物体的抽象表示,而对象基于这种物体的抽象表示下的具体实例化。简而言之,类就是对象的抽象化,而对象就是类的实例化。现以人为例,人所具有的共同属性,身高、体重、性别、姓名、种族、年龄等,而所具有的共同行为,吃饭、睡觉、工作、思考等,我们通过把这样的共同属性与行为给予高度抽象化,就可以设计成一个人类,而对于我们具体的个体,不管是你,还是他,又或许是我,都可以视为是由人类实例化的结果。由此观之,类和对象的关系实质是抽象和具体的关系,抽象的具体化,制造了对象;而具体的抽象化,构造了类。
当我们弄清楚了类和对象究竟是怎么回事后,那么如何去构造类呢?又如何去制造对象呢?同时,又如何去基于面向对象的思想去解决我们现实生活中的诸多问题呢?想必这是我们关心的,也是我们需要思考的。现以Java语言为例,简要介绍类和对象的设计与应用。先看如下代码:
/** *类描述:设计一个简单的人类。 *属性:姓名、性别、身高、体重 *行为:学习、工作 */ public class Human { public void study() { System.out.println("好好学习"); } public void doWork() { System.out.println("努力工作"); } private String name; private char sex; private int height; private int weight; }
类设计的语法格式:[修饰符] class 类名 { 类体 }
修饰符主要有public,abstract,final 和默认的,类名就是对所设计的类取一个通俗易懂的名字,通常首字母大写,并遵循命名的规则,类体包括类的行为部分和属性部分,前者使用各种方法来实现,后者使用各种数据成员来表示。不管是方法,还是数据成员,通过对其访问权限的设置,体现出OOP中的封装特性。这样做的好处,一是保护数据不轻易被更改,提升了数据的安全性;二是符合消息驱动的机制和面向接口编程的思想。关于如何设计类,关键在于根据实际的问题寻找到合适的共同属性与行为。这既需要丰富的经验,也需要活跃的思维。因此,有意识地自我训练基于类和对象的思维方式与方法,对OOD和OOP是大有裨益的。
当设计好类后,如何由类来生成对象呢?还是先看下面代码:
//基于Human类生成一个对象,并把其赋给对象的引用xiaoMing Human xiaoMing = new Human();
对象设计的语法格式:new 类名()
使用关键字new来生成一个对象,在堆中开辟一块内存空间来存放new出来的对象。那么如何来使用该对象呢?通过由new出来的对象赋值给一个对象的引用,就可以使用该对象引用后接点运算符操控对象。
代码清单如下:
/** *类描述:设计一个简单的人类。 *属性:姓名、性别、身高、体重 *行为:学习、工作 */ public class Human { public void study() { System.out.println("好好学习"); } public void doWork() { System.out.println("努力工作"); } private String name; private char sex; private int height; private int weight; public static void main(String[] args) { Human xiaoMing = new Human(); xiaoMing.study(); xiaoMing.doWork(); } }
运行结果如下:
总结:万事万物都是对象(everything is object),利用面向对象的思想去设计与编码。