继承
本节将介绍继承已有类的资产来创建新类的技术---类的派生
一、银行账户类
在之前介绍类时创建了银行账户类Account[Java基础---类] ,修改程序,使其能表示"定期存款":
添加如下所示的字段和方法:
• 表示定期存款余额的字段
• 确认定期存款余额的方法
• 解除定期存款, 全部转为普通存款的方法
添加了上述字段和方法的带有定期存款的银行账户类TimeAccount如下所示:
// 带定期存款的银行账户类
class TimeAccount {
private String name; // 账户名
private String no; // 账号
private long balance; // 可用余额
private long timeBalance; // 可用余额(定期存款)【添加】
//--- 构造函数 ---//
TimeAccount(String n, String num, long z, long timeBalance) {
name = n; // 账户名
no = num; // 账号
balance = z; // 可用余额
this.timeBalance = timeBalance; // 可用余额(定期存款)【添加】
}
//--- 确认账户名 ---//
String getName() {
return name;
}
//--- 确认账号 ---//
String getNo() {
return no;
}
//--- 确认可用余额 【添加】---//
long getBalance() {
return balance;
}
//--- 确认定期存款 ---//
long getTimeBalance() {
return timeBalance;
}
//--- 存入k元 ---//
void deposit(long k) {
balance += k;
}
//--- 取出k元 ---//
void withdraw(long k) {
balance -= k;
}
//--- 解除定期存款,全部转为普通存款【添加】 ---//
void cancel(long k) {
balance += timeBalance;
timeBalance = 0;
}
}
这个程序很轻松就能完成,只需将类Account的源程序复制过来,并添加、修改上述【添加】部分就可以了;类TimeAccount满足“处理定期存款"的目的,但失去了与银行账户类Account的兼容性。
static intcompBalance(Account a, Account b)
if (a. getBalance() > b. getBalance()) //a更多
return l;
else if (a.getBalance() < b.getBalance()) //b更多
return -1;
return O; //一样多
不可以向上述方法传递TimeAccount类型的实例(的引用),因为类Account和类TimeAccount是不同的类,如果编程时一直都是复制某个类, 然后对其进行部分添加、修改, 程序中就会充满无法兼容的"似是而非" 的类, 从而降低程序的开发效率、扩展性、维护性。
二、派生和继承
为了解决上述问题, 可以使用类的派生(derive)。所谓派生, 就是继承已有类的字段和方法等”资产“来创建新的类;派生时不仅可以继承资产,还可以添加、重写字段和方法。
下图是从已有的类Base派生一个继承其资产的类Derived的示例。在通过派生新创建的类的声明中,extends后面接的是派生源的类名。extend意为”扩展” ,类Derived的声明可以理解为:类Derived是对Base进行扩展后的类
派生源的类和通过派生创建的类名称如下:
• 派生源的类-----父类/上位类/基类/超类
• 派生的类----子类/下位类/派生类
从类Base派生类Derived举例:
• 对于类Derived来说,类Base是超类(上位类)
• 对于类Base来说,类Derived是子类(下位类)
这两个类的资产如下:
1)类Base
字段为a、b这2个,方法为a和b的getter和setter方法,总共4个。
2)类Derived