发布于 2015-06-14 01:45:14 | 172 次阅读 | 评论: 0 | 来源: 网络整理
子类生成(Subclassing)指的是在一个已有类的基础上创建一个新的类。子类继承超类的特性,并且可以优化或改变它。你还可以为子类添加新的特性。
为了指明某个类的超类,将超类名写在子类名的后面,用冒号分隔:
class SomeClass: SomeSuperclass {
// 类的定义
}
下一个例子,定义一个更具体的车辆类叫Bicycle
。这个新类是在 Vehicle
类的基础上创建起来。因此你需要将Vehicle
类放在 Bicycle
类后面,用冒号分隔。
我们可以将这读作:
“定义一个新的类叫Bicycle
,它继承了Vehicle
的特性”;
class Bicycle: Vehicle {
init() {
super.init()
numberOfWheels = 2
}
}
preview Bicycle
是Vehicle
的子类,Vehicle
是Bicycle
的超类。新的Bicycle
类自动获得Vehicle
类的特性,比如 maxPassengers
和numberOfWheels
属性。你可以在子类中定制这些特性,或添加新的特性来更好地描述Bicycle
类。
Bicycle
类定义了一个构造器来设置它定制的特性(自行车只有2个轮子)。Bicycle
的构造器调用了它父类Vehicle
的构造器 super.init()
,以此确保在Bicycle
类试图修改那些继承来的属性前Vehicle
类已经初始化过它们了。
注意:
不像 Objective-C,在 Swift 中,初始化器默认是不继承的,见初始化器的继承与重写
Vehicle
类中maxPassengers
的默认值对自行车来说已经是正确的,因此在Bicycle
的构造器中并没有改变它。而numberOfWheels
原来的值对自行车来说是不正确的,因此在初始化器中将它更改为 2。
Bicycle
不仅可以继承Vehicle
的属性,还可以继承它的方法。如果你创建了一个Bicycle
类的实例,你就可以调用它继承来的description
方法,并且可以看到,它输出的属性值已经发生了变化:
let bicycle = Bicycle()
println("Bicycle: (bicycle.description())")
// Bicycle: 2 wheels; up to 1 passengers
子类还可以继续被其它类继承:
class Tandem: Bicycle {
init() {
super.init()
maxPassengers = 2
}
}
上面的例子创建了Bicycle
的一个子类:双人自行车(tandem)。Tandem
从Bicycle
继承了两个属性,而这两个属性是Bicycle
从Vehicle
继承而来的。Tandem
并不修改轮子的数量,因为它仍是一辆自行车,有 2 个轮子。但它需要修改maxPassengers
的值,因为双人自行车可以坐两个人。
注意:
子类只允许修改从超类继承来的变量属性,而不能修改继承来的常量属性。
创建一个Tandem
类的实例,打印它的描述,即可看到它的属性已被更新:
let tandem = Tandem()
println("Tandem: (tandem.description())")
// Tandem: 2 wheels; up to 2 passengers
注意,Tandem
类也继承了description
方法。一个类的实例方法会被这个类的所有子类继承。