gpt4 book ai didi

swift - 为什么我们要在 Swift 中覆盖初始化器?

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:22 25 4
gpt4 key购买 nike

来自 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 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 )。但我不明白这种覆盖父初始化器的想法。

最佳答案

子类可能“默认”不继承它们的父类(super class)初始化器,但它们可以被继承(例如,如果你不提供任何指定的初始化器,你将自动继承父类(super class)的所有指定初始化器......见 Automatic Initializer Inheritance ) .

考虑一个名为 ChihuahuaDog 子类:如果您没有在 Chihuahua 中实现任何指定的初始化程序,您将自动继承 Dog 初始值设定项,您无需额外代码。但是,如果您出于某种原因确实需要重写它,那么您只需从您的 Chihuahua 指定初始化程序中调用一个 Dog 指定初始化程序。如果您的 Chihuahua 初始化程序与 Dog 指定的初始化程序具有相同的签名,那么您必须明确提供 override 关键字。

关于swift - 为什么我们要在 Swift 中覆盖初始化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41311603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com