继承 (Inheritance) 一个类可以继承另一个类的方法,属性和其他特特性,继承类叫子类,被继承叫父类,Swift中,类可以调用和访问父类的方法,属性和附属脚本,并且可以重写来修改他们的行为
1.定义基类 (Base class)
不继承与其他类的类,称为基类
- classVehicle{
- varnumberOfWheels:Int
- varmaxPassengers:Int
- funcdescription()->String{
- return"(numberOfWheels)wheels;upto(maxPassengers)passengers"
- }
- init(){
- numberOfWheels=0
- maxPassengers=1
- }
构造器的最简形式就像一个没有参数的实例方法,使用init关键字
init(){
-
- }
2.子类
将父类写在子类的后面,用冒号分隔
classSomeClass:SomeSuperclass{
- //classdefinitiongoeshere
- }
- //Bicycle继承了Vehicle的属性和方法
- Bicycle:Vehicle{
- init(){
- super.init()
- numberOfWheels=2
- letbicycle=Bicycle()
- println("Bicycle:(bicycle.description())")
-
-
- //子类可以继续被其他类继承
- Tandem:Bicycle{
- super.init()
- maxPassengers=2
- }
3.重写
子类为继承来的实例方法,类方法,实例属性或附属脚本提供自己定制的实现,称为重写 需要在前面加上 override 关键字标明是要提供一个重写版本而非提供一个相同的定义,override提醒Swift去检查该类的父类是否有匹配的方法,可保证重写定义是正确的 访问父类的方法,属性及附属脚本 使用super前缀
方法: super.someMethod()
属性: super.someProperty
附属脚本: super[someIndex]
3.1重写方法
Car:Vehicle{
- speed:Double=0.0
- maxPassengers=5
- numberOfWheels=4
- overridefuncdescription()->String{
- returnsuper.description()+";"
- +"travelingat(speed)mph"
- letcar=Car()
- println("Car:(car.description())")
- //Car:4wheels;upto5passengers;travelingat0.0mph
3.2重写属性
重写属性的时候,必须把名字和类型都写出来,让编译器检查重写的属性是否与父类匹配
//min函数是Swift标准库中的一个全局函数,接收两个或多个参数,返回最小的那个
- SpeedLimitedCar:Car{
- overridevarspeed:Double{
- get{
- super.speed
- set{
- super.speed=min(newValue,40.0)
- letlimitedCar=SpeedLimitedCar()
- limitedCar.speed=60.0
- println("SpeedLimitedCar:(limitedCar.description())")
- //SpeedLimitedCar:4wheels;upto5passengers;travelingat40.0mph
3.3重写属性监视器
可以在属性中重写为一个继承来得属性添加属性监听器,当继承的属性值发生变化,就会被通知
AutomaticCar:Car{
- vargear=1
- didSet{
- gear=Int(speed/10.0)+1
- super.description()+"ingear(gear)"
- letautomatic=AutomaticCar()
- automatic.speed=35.0
- println("AutomaticCar:(automatic.description())")
- //AutomaticCar:4wheels;upto5passengers;travelingat35.0mphingear4
3.4防止重写
使用 @final 来防止被子类重写( @final var,@final func,@final class func,@final subscript) (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|