文档介绍:第5章
继承与多态
继承性与多态性是面向对象程序设计的另外两个重要特性。在Java语言中,提供了能够实现继承性与多态性的完备技术,这使得更多的人们愿意将Java作为软件开发语言,进而充分地施展面向对象抽象性、封装性、继承性与多态性的优势,为构筑新时代的软件开发理念奠定了坚固基础。
类的继承
继承机制是面向对象程序设计不可缺少的关键概念,是实现软件可重用的根基,是提高软件系统的可扩展性与可维护性的主要途径。所谓继承是指一个类的定义可以基于另外一个已经存在的类,即子类基于父类,从而实现父类代码的重用,在有些教材中,又将父类称为超类或者基类。
继承关系的UML图形符号表示法
两个类的继承关系可以用“is a”表示,即子类是父类所描述的实体集中的子集。也就是说,父类涵盖更加共性的特征,更加具有一般性,子类增加的内容更加具有个性,是一般性之外的特殊内容,因此,又可以说,这种类的继承关系充分地反映了“一般与特殊”的关系。
定义子类
在Java语言中,定义子类的语法格式为:
[修饰符] class 子类名 extends 父类名{
子类体
}
其中,“修饰符”是子类的访问特性说明符等;class为定义类的关键字,“子类名”是子类的名称;extends是关键字,“子类体”是子类在继承父类内容的基础上,添加的特有内容。
EmployeeClass类与ManagerClass类的关系图
// file name:
public class EmployeeClass { // 雇员类
private String name; // 姓名
private double salary; // 工资
private String department; // 部门
public EmployeeClass() { ... }
public EmployeeClass(String name,
double salary, String department){ ... }
public void setName(String name) { ... }
public void setSalary(double salary) { ... }
public void setDepartment(String department) { ... }
public String getName() { ... }
public double getSalary() { ... }
public String getDeparyment() { ... }
public String toString() { ... }
}
public ManagerClass extends EmployeeClass { // 经理类
private double special; // 特殊津贴
public ManagerClass() { ... }
public ManagerClass(String name, double salary,
String department, double special) { ... }
public void setSpecial(double special) { ... }
public double getSpecial() { ... }
public String toString() { ... }
}
举例:设计与几何图元有关的类。
问题分析:几何图元是指可以绘制的基本几何图形,例如矩形、正方形、圆形、多边形等。鉴于篇幅的考虑,这里只考虑矩形与正方形。
假设任何几何图元都有颜色与位置两个属性,因此应该将这些共有特性定义在一个类中,它是顶层类;而矩形还应该有长、宽两个属性,由于矩形是一种几何图元,所以它自然应该拥有几何图元的共有特性,因此可以将矩形类设计为几何图元类的子类;因为正方形是一种特殊的矩形,它的特殊性在于长与宽相等,所以应该将正方形类设计为矩形的子类。
ShapeClass类、RectangleClass类与SquareClass类之间的关系类图
ShapeClass类是几何图元的通用类;矩形是一种特定的几何图元,因此,RectangleClass类应该是ShapeClass的子类;正方形是一种特殊的矩形,所以SquareClass类是RectangleClass类的子类。