子类生成指的是在一个已有类的基础上创建一个新的类。子类继承超类的特性,并且可以进一步完善。你还可以为子类添加新的特性。
为了指明某个类的超类,将超类名写在子类名的后面,用冒号分隔:
class SomeClass: SomeSuperclass {
// 这里是子类的定义
}
下一个例子,定义了一个叫 Bicycle
的子类,继承自超类 Vehicle
:
class Bicycle: Vehicle {
var hasBasket = false
}
新的 Bicycle
类自动继承 Vehicle
类的所有特性,比如 currentSpeed
和 description
属性,还有 makeNoise()
方法。
除了所继承的特性,Bicycle
类还定义了一个默认值为 false
的存储型属性 hasBasket
(属性推断为 Bool
)。
默认情况下,你创建的所有新的 Bicycle
实例不会有一个篮子(即 hasBasket
属性默认为 false
)。创建该实例之后,你可以为 Bicycle
实例设置 hasBasket
属性为 ture
:
let bicycle = Bicycle()
bicycle.hasBasket = true
你还可以修改 Bicycle
实例所继承的 currentSpeed
属性,和查询实例所继承的 description
属性:
bicycle.currentSpeed = 15.0
print("Bicycle: \(bicycle.description)")
// 打印“Bicycle: traveling at 15.0 miles per hour”
子类还可以继续被其它类继承,下面的示例为 Bicycle
创建了一个名为 Tandem
(双人自行车)的子类:
class Tandem: Bicycle {
var currentNumberOfPassengers = 0
}
Tandem
从 Bicycle
继承了所有的属性与方法,这又使它同时继承了 Vehicle
的所有属性与方法。Tandem
也增加了一个新的叫做 currentNumberOfPassengers
的存储型属性,默认值为 0
。
如果你创建了一个 Tandem
的实例,你可以使用它所有的新属性和继承的属性,还能查询从 Vehicle
继承来的只读属性 description
:
let tandem = Tandem()
tandem.hasBasket = true
tandem.currentNumberOfPassengers = 2
tandem.currentSpeed = 22.0
print("Tandem: \(tandem.description)")
// 打印:“Tandem: traveling at 22.0 miles per hour”