欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 类的构造器继承与重写

类的构造器继承与重写

2025/9/27 0:21:11 来源:https://blog.csdn.net/qq_74177011/article/details/144067297  浏览:    关键词:类的构造器继承与重写

类的构造过程

Swift中的类的构造过程分两个阶段,第一个阶段主要是对类中属性进行初始化,第二阶段是在实例对象准备使用对象前进一步自定义存储属性。。

必须遵守的四大规则:
 

  • 指定初始化器必须保证在向上委托给父类初始化器之前,其所在类引入的所有属性都要初始化完成。 
  • 指定初始化器必须先向上委托父类初始化器,然后才能为继承的属性设置新值。如果不这样做,指定初始化器赋予的新值将被父类中的初始化器所覆盖 
  • 便捷初始化器必须先委托同类中的其它初始化器,然后再为任意属性赋新值(包括同类里定义的属性)。如果没这么做,便捷构初始化器赋予的新值将被自己类中其它指定初始化器所覆盖。 
  • 初始化器在第一阶段初始化完成之前,不能调用任何实例方法、不能读取任何实例属性的值,也不能引用 self 作为值。

第一阶段:

调用类的指定构造器或者便利构造器。

对类的实例对象进行内存分配,但内存未被初始化(不能通过self访问)

调用的构造器保证类中引入的相关属性都已经初始化,属性所属内存也完成分配。

构造器向上切换到父类构造器,对父类存储属性完成跟子类一样的任务。

不断往上层切换,直到最顶端。此时所有存储属性都已初始化,实例内存也完成初始化,该阶段完成

第二阶段:

从顶端往下,构造器可以通过self来访问或者修改属性以及调用实例方法。

构造器的继承与重写

构造器的继承与重写规则如下:

  • 如果子类构造器和父类指定构造器相匹配·,需要在子类构造器加上override关键字
  • 子类构造器与父类便利构造器相匹配,不需要加override修饰符。
  • 若父类没有有参构造器,子类构造器也没有自定义父类相关属性,那么子类可以省略super.init()

示例:

构造器的自动继承

如果子类中所有新属性都有了初始值,那么以下两个规则将适用:

  • 子类没有定义任何指定构造器,会继承父类所有指定构造器
  • 如果子类提供了所以父类指定构造器的实现,将自动继承父类所有便利构造器

可失败构造器的重写

当你在父类中定义了一个可失败的构造器,那么你可以在子类中重写一个不可失败构造器,只需要在构造器前面加上override。

但是你不可以将父类不可失败构造器重写成可失败构造器:

对于必要构造器的重写,子类只需要添加required关键字,不需要加上override

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词