美文网首页
Swift子类重写父类构造函数

Swift子类重写父类构造函数

作者: Howeix | 来源:发表于2019-02-27 09:58 被阅读0次
    swift中子类重写父类构造方法: 如果父类没有指定构造方法(带参数的构造方法), 子类重写父类构造方法就不需要调用super的构造方法, 反之亦然(如果父类有指定构造方法, 子类重写的构造方法中必须显示调用父类构造方法):

    父类没有指定构造函数:

    class Animal {
        var name: String
        var age: Int
        init() {
            name = "Dog"
            age = 10
        }
        
        //指定构造方法
    //    init(name: String, age: Int) {
    //        self.name = name
    //        self.age = age
    //    }
        
    }
    
    class Dog : Animal {
        var NO: Int
        override init() {
            NO = 24
            //在没有指定构造函数的情况下,可以不用显示调用父类构造方法, 编译通过, swift会自动隐式调用super.init()
            //这样可以保证父类成员初始化完成, 另外swift构造顺序是先初始化完成子类成员, 再去初始化父类成员
    //        super.init()
        }
    }
    

    父类有指定构造函数

    class Animal {
        var name: String
        var age: Int
        init() {
            name = "Dog"
            age = 10
        }
        
        //指定构造方法
        init(name: String, age: Int) {
            self.name = name
            self.age = age
        }
        
    }
    
    class Dog : Animal {
        var NO: Int
        override init() {
            NO = 24
            //在有指定构造函数的情况下,必须显示调用父类构造方法, 不然通不过编译
            super.init()
        }
    }
    

    相关文章

      网友评论

          本文标题:Swift子类重写父类构造函数

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