Swift学习之继承

作者: coderhlt | 来源:发表于2020-03-31 18:24 被阅读0次

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

    final class Animal {
        func speak(){}
        
        class func Run() {}
        
        static func Test(){}
    }
    
    • 类被关键字final修饰后,就不会被任何类继承

    2、子类可以重写父类的下标、方法、属性,重写必须添加上overide关键字

    一、重写方法

    class Animal {
        func speak(){}
        
        class func Run() {}
        
        static func Test(){}
    }
    
    class Dog: Animal {
        override func speak() {
            print("重写父类的实例方法")
        }
        override class func Run() {
             print("重写父类的类型方法")
        }
    }
    let d = Dog()
    d.speak()
    
    • 1、被class修饰的类型方法、下标,允许被子类重写
    • 2、被static修饰的类型方法、下标,不允许被子类重写

    二、重写属性

    2.1 实例属性

    class Animal {
        var name = "test"
        
    }
    
    class Dog: Animal {
        override var name: String {
            set{
                super.name = newValue
            }
            
            get {
                return super.name
            }
        }
    }
    let d = Dog()
    print(d.name)
    
    • 1、子类不可以将父类属性重写为存储属性,即使父类的属性是存储属性。
    • 2、子类可以将父类的存储属性重写为计算属性,重写时,属性名、类型要一致。

    2.2 计算属性

    class Animal {
        var age:Int {
            set {
                
            }
            get {
                return 10
            }
        }
    }
    
    class Dog: Animal {
        override var age: Int{
            set{
                
            }
            get{
                return 20
            }
        }
    }
    let d = Dog()
    

    2.3属性观察器

    class Animal {
        var age:Int = 10
        var height:Float{
            get {13.4}
            set {}
        }
    }
    
    class Dog: Animal {
        override var age: Int{
            didSet {
                print(oldValue)
            }
            
            willSet {
                print(newValue)
            }
        }
        
        override var height: Float{
            didSet {
                print(self.height)
            }
        }
        
    }
    let d = Dog()
    d.age = 11
    d.height = 20
    print(d.age)
    
    • 可以在子类中为父类属性(除了只读计算属性、let属性),增加属性观察器

    相关文章

      网友评论

        本文标题:Swift学习之继承

        本文链接:https://www.haomeiwen.com/subject/pchguhtx.html