用自己的语言描述Java中的类和对象
下列关于对象的哪一种说法是正确的·请选择一个正确的答案。
(a)对象是可以对其进行实例化从而得到类的东西。
(b)对象是类的实例。
(c)对象是一种蓝本,据此可以创建抽象的具体实现。
(d)对象是指向属性的引用。
(e)对象是一种变量。考点:该面试题考察求职者对于Java类和对象的理解。
出现频率:★★★
【面试题解析】
1.类
在处理复杂事物的时候,用到的一种基本手段就是抽象。抽象的目的就是区别事物之间的本质和不同,面向对象编程(OOP)的实质就是利用类和对象来建立抽象模型。
类表示了对象的类别,是创建对象的蓝本。建立一个事物的抽象模型,本质上就是表达该事物的性质和行为。使用类来建立抽象模型,是通过在类中定义变量和方法来实现的。
类中定义的属性是一种可存储值的变量,该变量代表着事物的具体性质。类的对象所具有的行是由定义的方法来实现的。类中定义的变量和方法被称为类的成员。
在项目开发中,类一般可以通过UML建模来表示,如图1所示。
图1 类的UML表示法
图1中,定义了类Gun的成员,即类Gun的变量和方法。从UML图中可以看到,类定义了如下所示3个变量。
· caliber:是一个Double类型的变量,表示Gun类所抽象事物(枪)的口径。
· length:是一个Double类型的变量,表示Gun类所抽象事物(枪)的长度。
· gun_type:是一个字符串类型的变量,表示Gun类所抽象事物(枪)的类型,例如是手枪还是突击步枪。
同时类中定义了如下所示3个方法。
· fire:定义了Gun的开火行为,及fire方法。
· maintenance:定义了Gun的维护方法。
· Gun:定义了一个同类同名的构造方法。
开发者可以通过UML生成代码工具,或者是手工在编辑器中建立图1中所示的类,如下所示:
public class Gun { // 定义枪的口径 public Double caliber; // 定义枪的长度 public Double length; // 定义枪的类型 public int gun_type; // 构造方法 public Gun() { } // 带参数的构造方法 public Gun(String name) { } // 开火的方法 public void fire() { System.out.println(gun_type +" is fireing"); } // 维护的方法 public Boolean maintenance() { return true; } }
2.对象
对象是类的实例。对象在构造时以类为蓝本,创建对象的过程叫做实例化。对象是类所表示的抽象事物的具体实例。
例如前面所讲述的Gun类,那么可以根据Gun类创建一个ak47的对象,即Gun的具体实现。
对象可以使用UML来表示,如图2所示。
图2 对象的UML表示法
ak47是根据Gun类创建的一个对象,在Java程序中,可以使用如下代码创建一个Gun对象:
…… public static void main(String[] args) { //建立一个Gun类对象,即Gun类的实例ak47 Gun ak47=new Gun(); //定义ak47的口径 ak47.caliber=7.6; //定义ak47的长度 ak47.length=57.8; //定义ak47的类型 ak47.gun_type="AK47"; //调用fire方法 ak47.fire(); } ……
运行该示例,结果如下:
AK47 is firing
参考答案:(b)。