为什么我们在Swift中覆盖初始值设定项?

为什么我们在Swift中覆盖初始值设定项?,第1张

概述从 Swift’s documentation开始: Unlike subclasses in Objective-C, Swift subclasses do not inherit their superclass initializers by default. 但随后它说: When you write a subclass initializer that matches a super 从 @L_404_0@开始:

Unlike subclasses in Objective-C,Swift subclasses do not inherit
their superclass initializers by default.

但随后它说:

When you write a subclass initializer that matches a superclass
designated initializer,you are effectively provIDing an overrIDe of
that designated initializer. Therefore,you must write the overrIDe
modifIEr before the subclass’s initializer deFinition.

来自Java背景,其中构造函数不是继承的,我不明白它是如何工作的.为什么我们要覆盖默认情况下不继承的初始化程序?在我看来,像构造函数一样,初始化程序将隐式命名为类本身,并且可以在子类中重载(例如,Java中的类Dog只有名为Dog的构造函数).但我不明白这个覆盖父初始化器的想法.

解决方法 子类可能不会“默认”继承其超类初始值设定项,但它们可以继承(例如,如果您不提供任何指定的初始值设定项,您将自动继承超类的所有指定初始值设定项…请参阅 Automatic Initializer Inheritance).

考虑一个名为Chihuahua的Dog子类:如果你没有在Chihuahua中实现任何指定的初始值设定项,你自动继承Dog初始值设定项,而不需要额外的代码.但是如果您确实需要因某种原因覆盖它,那么只需要从Chihuahua指定的初始化程序中调用Dog指定的初始化程序.如果您的Chihuahua初始化程序与Dog指定的初始化程序具有相同的签名,则必须显式提供overrIDe关键字.

总结

以上是内存溢出为你收集整理的为什么我们在Swift中覆盖初始值设定项?全部内容,希望文章能够帮你解决为什么我们在Swift中覆盖初始值设定项?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1003190.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存