Swift学习笔记九之继承
2017-01-10 本文已影响0人
克鲁德李
1、继承:一个类可以继承另一个类的方法,属性及其它特征
class Vehicle {//定义了一个机动车的父类
var currentSpeed = 0.0//速度属性
var description: String {//描述速度的只读计算属性
get{
return "\(currentSpeed)公里/每小时"
}
}
func makeNoise() {
//为空
}
}
let someVehicle = Vehicle()//创建一个实例
print("速度:\(someVehicle.description)")//速度:0.0公里/每小时
//定义子类,子类获得父类的所有属性
class Bicycle: Vehicle{//定义子类继承Vehicle
var hasTwoWheels = true
}
let bicycle = Bicycle()
bicycle.hasTwoWheels = true
bicycle.currentSpeed = 15//父类的属性
print("描述:\(bicycle.description)")//描述:15.0公里/每小时
2、子类还可以被其他类继承
class Tandem: Bicycle {
var canRideByTwoPeople = true
}
let tandem = Tandem()
tandem.hasTwoWheels = true
tandem.canRideByTwoPeople = true
tandem.currentSpeed = 10.0
print("描述: \(tandem.description)")//描述:10.0公里/每小时
3、重写:子类可以对继承自父类的实例方法、类方法、实例属性、下标进行重写
//定义子类,子类获得父类的所有属性
class Bicycle: Vehicle{//定义子类继承Vehicle
var hasTwoWheels = true
}
class Tandem: Bicycle {
var canRideByTwoPeople = true
}
class Train: Vehicle {
var passenger = 20
override var currentSpeed: Double{//重写属性观察器
didSet{
passenger = Int(currentSpeed/10)
}
}
override func makeNoise() {//重写父类方法需要在前面加override关键字
print("哐当哐当。。。")
}
override var description: String{
return super.description + ",有 \(passenger)个乘客"//super.description返回继承值
}
}
let train = Train()
train.makeNoise()//调用重写的方法
print(train.description)//0.0公里/每小时,有0个乘客
train.currentSpeed = 200
print(train.description)//200.0公里每小时,有20个乘客
4、final关键字防止方法属性下标被重写
class Animal {
//如果方法、属性、下标想不被重写,可以在最前面添加关键字final
final func run(){
print("Running")
}
}
final class Dog: Animal {//在class前添加final,Dog类不被继承
// override func run(){ run方法不可以被重写
//
// }
}