Swift 语法:继承(Inheritance)

转载请声明出处:http://blog.csdn.net/jinnchang/article/details/43315411

1、概念

一个类可以继承(inherit)另一个类的属性、方法和其它特性。
当一个类继承其它类时,继承类叫子类(subclass),被继承类叫超类(或父类,superclass)。子类还可以继续被其他类继承。
注意:在 Swift 中,继承是区分「类」与其它类型的一个基本特征。

2、基类与子类生成

不继承于其它类的类,称之为基类。
Swift 中的类并不是从一个通用的基类继承而来。如果你不为你定义的类指定一个超类的话,这个类就自动成为基类。

// 定义一个通用的 Vehicle
class Vehicle {
    var currentSpeed = 0.0
    var description: String {
        return "traveling at \(currentSpeed) miles per hour"
    }
	func makeNoise() {
        // do nothing - an arbitrary vehicle doesn't necessarily make a noise
    }
}
let someVehicle = Vehicle()
println("Vehicle: \(someVehicle.description)")
// prints "Vehicle: traveling at 0.0 miles per hour"

// 定义一个子类 Bicycle 继承 Vehicle
class Bicycle: Vehicle {
    var hasBasket = false
}
let bicycle = Bicycle()
bicycle.hasBasket = true
bicycle.currentSpeed = 15.0
println("Bicycle: \(bicycle.description)")
// prints "Bicycle: traveling at 15.0 miles per hour"
注意:子类只允许修改从超类继承来的变量属性,而不能修改继承来的常量属性。

3、重写(Overriding)

子类可以为继承来的实例方法、类方法、实例属性或下标提供自己定制的实现,这种行为叫做重写。

如果要重写某个特性,你需要在重写定义的前面加上 override 关键字。

// 1、定义一个子类 Train 继承 Vehicle ,重写方法 makeNoise()
class Train: Vehicle {
    override func makeNoise() {
        println("Choo Choo")
    }
}
let train = Train()
train.makeNoise()
// prints "Choo Choo"

// 2、定义一个子类 Car 继承 Vehicle ,重写属性 description
class Car: Vehicle {
    var gear = 1
    override var description: String {
        return super.description + " in gear \(gear)"
    }
}
let car = Car()
car.currentSpeed = 25.0
car.gear = 3
println("Car: \(car.description)")
// prints "Car: traveling at 25.0 miles per hour in gear 3"

// 3、定义一个子类 AutomaticCar 继承 Car ,重写属性观察器
class AutomaticCar: Car {
    override var currentSpeed: Double {
        didSet {
            gear = Int(currentSpeed / 10.0) + 1
        }
    }
}
let automatic = AutomaticCar()
automatic.currentSpeed = 35.0
println("AutomaticCar: \(automatic.description)")
// prints "AutomaticCar: traveling at 35.0 miles per hour in gear 4"
你不可以为继承来的常量存储型属性或继承来的只读计算型属性添加属性观察器。这些属性的值是不可以被设置的。
此外还要注意,你不可以同时提供重写的 setter 和重写的属性观察器。

4、防止重写

你可以通过把方法、属性或下标标记为 final 来防止它们被重写。
你可以通过在类关键字 class 前添加 final(final class),这样的类是不可被继承的。

5、结语

文章最后更新时间:2015年02月01日11:23:28。
欲了解更细致的请参考官方文档:Inheritance

你可能感兴趣的:(继承,swift,inheritance,Playgrounds)