Swift学习笔记九之继承

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方法不可以被重写
//        
//    }
    
}

你可能感兴趣的:(Swift学习笔记九之继承)