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方法不可以被重写
//        
//    }
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,925评论 1 10
  • 下标脚本 下标脚本 可以定义在类、结构体和枚举这些目标中,可以认为是访问集合(collection),列表(li...
    cht005288阅读 468评论 0 0
  • 本章将会介绍 下标语法下标用法下标选项定义一个基类子类生成重写防止重写 下标 下标可以定义在类、结构体和枚举中,是...
    寒桥阅读 470评论 0 1
  • Swift属性 Swift属性将值跟特定的类,结构体,枚举关联。分为存储属性和计算属性,通常用于特定类型的实例。属...
    小小厨师阅读 877评论 0 0
  • 为什么叫这个题目?因为,我一口气看了分别由三个国家拍摄的三个版本的《十二怒汉》。 首先是俄罗斯版的《十二怒汉》,2...
    亚理思多得阅读 284评论 0 2