一、结构体和类的本质区别
结构体 编译完就知道调用谁


类 (类似c++ 的虚函数表) 12
直接将对象将来要调用的函数内存地址提前放进类型信息里面,这些类型信息编译完就确定你将来要调用谁,运行过程过程中就去那块内存里面找



方法的存储

二、初始化器 指定初始化器纵向调用 捷初始化器横向调用

2.1 便捷初始化器 必须要调用指定初始化器


初始化器


每一个初始化器保证我每个成员都是要有值的
类偏向于少量指定初始化器,一个类通常只有一个指定初始化器

指定初始化器必须从它的直系父类调用指定初始化器

便捷初始化器最终必须调用一个指定初始化器
便捷初始化器可以调用自己的宁一个便捷初始化器

二、初始化器的相互调用

三、两段式初始化 1.25
先从下往上(保证所有的成员都有值)在从上往下(设置个性话的值)



四、安全检查

五、重写 1.56
当重写父类的指定初始化器时,必须加上override(即使子类的实现是便捷初始化器)


如果子类写了一个匹配父类便捷初始化器的初始化器,不用加上override
因为父类的便捷初始化器永远不会通过子类直接调用,因此,严格来说,子类无法重写父类的便捷初始化器

六、自动继承

如果子类没有自定义任何指定初始化器,它会自动继承父类所有的指定初始化器



如果子类提供了父类所有指定初始化器的实现(要么通过方式①继承,要么重写)
子类自动继承所有的父类便捷初始化器




就算子类添加了更多的便捷初始化器,这些规则仍然适用