面向对象编程简介
Java 编程语言是面向对象的语言。Visual Basic 具有许多对象特性,但不是严格的面向对象语言。本节将讨论如何用 Visual Basic 构建一个类,然后讨论如何用 Java 语言构建等价的类。
使用类
您可以将 类视为您定义的数据类型。类的变量实例称为 对象。与其他变量类似,对象具有一个类型、一组属性和一组操作。对象的类型由从中实例化对象的类表示的。对象的属性表示其值或状态。对象的操作是可能的函数集,您可以在对象中调用这些函数来更改其状态。
请考虑 Visual Basic 的 Integer 基本数据类型,它表示一个整数。您可以使用该类型名称创建整数实例的变量。每个 Integer 变量都有一个属性,表示变量存放的整数。每个 Integer 变量还有相同的操作集,您可以使用该操作集来更改变量的状态(或值)。对 Integer 变量执行的一些操作包括加 (+)、减 (-)、乘 (*)、除 (\) 和取模 (Mod)。
定义 Visual Basic 类
现在,我们来研究您可能要开发自己类型的情形――自己开发的类型是一个 Visual Basic 语言不支持作为基本类型的复杂对象。假定您是为财务机构开发软件的小组成员,您的工作是开发表示一般银行帐户的代码。一个银行有很多帐户,但每个帐户都有相同的基本属性和操作的集合。特别是,帐户包含一个余额和一个 ID 号。清单 10 中的 Visual Basic 代码定义了帐户类。它定义了三种操作: Deposit 、 Withdrawal 和 InitAccount (用于初始化余额和帐号)。注意如何通过使用私有变量和您定义的称为 Balance 的属性允许该类的用户获得余额。
清单 10. 定义 Visual Basic 类
2
3 Private theAccountNumber As Integer
4
5 Public Sub InitAccount (number As Integer, initBal As Currency)
6
7 theAccountNumber = number
8
9 theBalance = initBal
10
11 End Sub
12
13 Public Sub Deposit (amount As Currency)
14
15 theBalance = theBalance + amount
16
17 End Sub
18
19 Public Sub Withdrawal (amount As Currency)
20
21 theBalance = theBalance - amount
22
23 End Sub
24
25 Public Property Get Balance() As Currency
26
27 Balance = theBalance
28
29 End Property
30
31 Public Property Get AccountNumber() As Integer
32
33 AccountNumber = theAccountNumber
34
35 End Property
36
37
定义 Java 类
清单 11 用 Java 语言实现 Account 类。
清单 11. Java 语言 Account 类
2
3 private double balance;
4
5 private int number;
6
7 public Account(int number, double balance) {
8
9 number = argNumber;
10
11 balance = argBalance;
12
13 }
14
15 public void deposit(double amnt) {
16
17 balance += amnt;
18
19 }
20
21 public void withdrawal (double amnt) {
22
23 balance -= amnt;
24
25 }
26
27 public double getBalance() {
28
29 return balance;
30
31 }
32
33 public int getNumber() {
34
35 return number;
36
37 }
38
39 }
40
41
如果您所见,定义 Java 类与定义 Visual Basic 类不同。这两种语言各自的帐户类反映了以下主要区别:
在 Java 代码中,您不需要单独的方法来初始化 Account 的实例。使用 构造函数即可。如其名称的含义,您使用它来构建类的实例。构造函数必须与定义它的类具有相同的名称,而且它可以带参数。您可以为一个类创建多个构造函数,如果您没有提供构造函数,则您会自动使用不带参数的默认构造函数。您可以像清单 11 那样使用构造函数:
Account myAccount = new Account(12345, 0.00);
与 Visual Basic 不同,Java 语言对属性没有特殊规定。按照约定,Java 属性是私有域,您通常提供一组称为访问器(accessor)的方法来访问包含属性的域。返回属性值的方法称为 getter,设置属性值的方法称为 setter。下面是 setter 方法的例子:
public void setIntProperty(int argIntProperty) {intProperty = argIntProperty;}
在 Visual Basic 中,类成员的默认访问修饰符不是 public (稍后介绍访问修饰符的更多信息)。
使用对象的带来的好处
在诸如 Java 语言之类的面向对象语言中使用类和对象会带来三个主要好处: 封装、 继承和 多态 :
封装(或信息隐藏)是指将对象视作一个“黑盒”;即使用对象时,无须了解(或关心)对象是如何实现的。通过类中定义的方法(运算符)所定义的接口使用对象,可以确保更改类实现而不破坏使用该类对象的任何代码。
多态是指将不同特性与相同名称关联的能力,以及根据上下文选择正确特性的能力。最常见多态例子是方法重载,您可以定义使用名称相同的几种方法,只要这些方法所带的参数不同即可。
继承 是指通过编写扩展现有类的新类来重用代码。例如,假设您希望编写新类来表示支票帐户。因为支票帐户是一个特殊种类的银行帐户,所以可以编写一个扩展 Account 类(或作为 Account 类的子类)的 CheckingAccount 类。然后, CheckingAccount 类自动获得 Account 类的状态和所有运算符(函数)。您只需要添加特定于 CheckingAccount 类的新状态和运算符即可。例如,您可以添加一个 cashCheck() 函数执行兑现支票帐户写的支票的操作。如有必要,还可以更改子类的状态和行为。例如,可能允许用户透支其支票帐户,因此您需要重载透支函数。