2.3 继承
通常,不同的对象也会有一些相同的地方。比如,山地车、公路车和协力车都具备自行车的属性:当前速度、当前踏板频率、当前档位等。但它们也有各自的特性:协力车有两个座垫和两个车把,公路车有赛车车把,有些山地车有其他链条以降低变速比。
在面向对象编程中,类可以继承其他类的常用状态和行为。在上述例子中,Bicycle是MountainBike、RoadBike和TandemBike的超类(superclass)。在Java程序语言中,每个类只能有一个直接超类,每个超类都潜在地有无限多个子类(subclass),如图2-3所示。
子类的创建语法很简单,类声明时按顺序添加关键字extends和要继承的类名:
这样定义后,MountainBike就会拥有与Bicycle相同的字段和方法,编码时只需关注那些不同的属性。这种定义方式可以增强子类代码的可读性。但是,文档化每个超类定义的状态和行为时要特别小心,因为子类的源文件不会包含超类的代码。