swift从入门到精通11-继承

220 阅读1分钟

1.继承的定义

值类型(枚举,结构体)不支持继承,只有类支持继承。

没有父类的类称为基类。子类可以重写父类的下标,方法,属性,重写必须加入override关键字。

例子:

class Animal {
    var age = 0
}


class cat: Animal {
    var wedight = 0
}

2.重写实例(类型)下标和方法

例子:

class Animal {
    func sleep() {
        print("Animal sleep")
    }
    
    class func eat(){
        print("Animal eat")
    }
    
    subscript(index: Int) -> Int{
        get {
            return index
        }
    }
}


class Cat: Animal {    
    override func sleep() {
        print("Cat sleep")
    }
    
    override class func eat() {
        print("Cat eat")
    }
    
    override subscript(index: Int) -> Int {
        get {
            return index + 1
        }
    }
}

3.重写属性

  • 子类可以将父类的属性重写为计算属性。
  • 子类不可以将父类的属性重写为存储属性。
  • 只能重写var属性,不能重写let属性。
  • 重写时,属性名和类型保持一致。
  • 子类的权限要大于父类的权限。
  • 被static修饰的类型属性不可以被子类重写。

例子:

class Circle {
    var radius: Int = 0
    var diameter: Int {
        set {
            radius = newValue / 2
        }
        get {
            return radius * 2
        }
    }
}


class SubCircle: Circle {
    override var radius: Int {
        set {
            super.radius = newValue
        }
        get {
            return super.radius
        }
    }
    override var diameter: Int {
        set {
            super.diameter = newValue
        }
        get {
            return super.diameter
        }
    }
}

4.属性观察器

在子类中,可以为父类属性添加属性观察器。

例子:

class Circle {
    var radius: Int = 0
    var diameter: Int {
        set {
            radius = newValue / 2
        }
        get {
            return radius * 2
        }
    }
}


class SubCircle: Circle {
    override var radius: Int {
        willSet {
            print("radius willSet",newValue)
        }
        didSet {
            print("radius didSet",oldValue,radius)
        }
    }
    override var diameter: Int {
        willSet {
            print("diameter willSet",newValue)
        }
        didSet {
            print("diameter willSet",oldValue)
        }
    }
}

5.final

  1. 被final修饰的方法,下标,属性,禁止重写
  2. 被final修饰的类,禁止重写


上一篇文章:swift从入门到精通10-下标

下一篇文章:swift从入门到精通12-初始化