美文网首页
Swift十 (一: 多态汇编原理? 二: final函数 三

Swift十 (一: 多态汇编原理? 二: final函数 三

作者: 看谷秀 | 来源:发表于2022-05-04 11:27 被阅读0次

一: 多态汇编原理?
二: final函数
三: 初始化器
四: 重写override
五: 自动继承

一:多态汇编原理?
二: final函数

// 类禁止被集成 方法, 属性禁止被重写(下标本质是函数)


截屏2022-05-03 下午1.04.40.png
三: 初始化器
截屏2022-05-03 下午1.49.26.png

// 注意: 初始化准则是,保证每一个存储属性都要有值

"每个类至少有一个指定初始化器, 指定初始化器是类的主要初始化器"
// 每个类的默认的指定初始化器就是 init(), 重写了指定初始化器则覆盖 size类, 默认init()


截屏2022-05-03 下午1.19.32.png

// 自定义初始化器之后, 默认生成的就被覆盖了


截屏2022-05-03 下午1.19.58.png

"便捷初始化器必须从相同的类里调用另一个初始化器"
// 便捷初始化器必须调用指定初始化器, 保证每个成员变量都有值


截屏2022-05-03 下午1.46.15.png

// 子类的指定初始化器必须调用父类的指定初始化器

"指定初始化器必须从他的直系父类调用指定初始化器" 子类student指定初始化器, 必须调用父
类Person的指定初始化器init(age: Int)
// 类自己的便捷初始化器, 必须调用当前类的指定初始化器


截屏2022-05-03 下午6.04.18.png

"便捷初始化器最终必须调用一个指定初始化器"
// 间接调用也可以


截屏2022-05-03 下午6.10.32.png

官方指定初始化器, 便捷初始化器流程图


截屏2022-05-03 下午6.37.05.png

两段初始化
// 关于子类自定义初始化器, 和父类自定义初始化器关系梳理


截屏2022-05-04 上午10.47.00.png

// 第一阶段从下往上 子类-->父类
// 第一阶段 Student调用便捷调用指定初始化器, 指定初始化器保证当前类的存储属性都初始化, score, 然后调用父类的指定初始化器, 依次保证保证子类, 父类所有村塾属性都初始化


截屏2022-05-04 上午10.49.05.png
// 第二阶段从上往下 父类-->子类
截屏2022-05-04 上午10.57.49.png

安全检查
子类调用父类的指定初始化器, 需要保证自己的存储属性初始化完毕


截屏2022-05-04 上午11.05.24.png
class Animal {
    var age: Int = 0
    func eat() {
        print("animal---eat")
    }
    init(age: Int) { // 指定初始化器
        self.age = age
    }
}

class Dog: Animal {
    var name: String = ""
    init(name: String) { // 指定初始化器
//        self.name = name
        super.init(age: 5)
        self.name = name // 这里调用是因为上面存储属性有默认值, 否则智能写在super上面
    }
    let dog = Dog(name: "旺财")
}
四: 重写override
截屏2022-05-04 上午11.15.57.png

// 重写父类的指定初始化器, 不管当前类用指定初始化器重写, 还是便捷初始化器重写, 都需要override


截屏2022-05-04 上午11.18.49.png
五: 自动继承

// 子类不仅能继承父类的方法, 属性等, 指定初始化器也能继承
但是子类默认的 init() 就被覆盖了, 除非你自己定义


截屏2022-05-04 上午11.26.03.png

相关文章

网友评论

      本文标题:Swift十 (一: 多态汇编原理? 二: final函数 三

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