为什么默认情况下会调用超类指定的初始化程序?

PGD​​ev

我是Swift的新手,但在初始化程序方面遇到了一些问题。我用以下代码创建了一个Swift文件:

import Foundation

class SuperClass
{
    var a : Int
    init()
    {
        a = 10
        print("In Superclass")
    }
}

class SubClass : SuperClass
{
    override init()
    {
        print("In Subclass")
    }
}

在上面的代码中,init()ofSubClass不包含对init()of的调用SuperClasssuper.init()in中没有SubClass init()

所以我的问题是:

1.如果我不打电话给指定的init()为什么没有给出任何错误SuperClass

2.如果我正在创建SubClassie的对象let s = SubClass(),则输出为:

In Subclass

In Superclass

为什么init()SuperClass获取调用?默认情况下,子类init()是否调用超类init()?

马特

为什么init()SuperClass的被调用?init()init()默认情况下会调用超类吗?

基本上是。

如果所有规则都说您应该说super.init()而您不说,那么它就是为您服务的。

我不喜欢这种行为;它的文档记录不充分,此外,暗中为您做事似乎违背了Swift的精神。但是很久以前,我对它提出了一个错误,并被告知这是预期的行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在没有类型的情况下初始化对象时,它会调用什么?

为什么默认情况下会初始化局部变量?

为什么成员初始化程序在移动时会调用额外的构造函数调用?

默认变量的值与默认情况下的初始化

任何情况下的默认结构初始化?

默认情况下是否初始化结构变量?

必须在Swift 1.2中调用超类'UIViewController'的指定初始化程序

无法子类化UIButton:必须调用超类'UIButton'的指定初始化程序

Swift:即使代码正在执行,“必须调用超类的指定初始化程序”错误

必须调用超类“ UICollectionView”的指定初始化器

从指定的初始化程序调用超静态方法

C ++类是否具有默认构造函数?在以下情况下会调用什么构造函数?

空类是否可在没有初始化程序或显式默认构造函数的情况下用作constexpr变量?

在Java中,为什么只有在声明时默认情况下才将int变量赋给0,所以才用0初始化int变量?

如果在未设置任何内容的情况下局部变量获取默认值,为什么必须初始化获取变量“ xxx”?

为什么 C++ 中类字段的默认初始化需要析构函数调用?

空的初始化程序列表作为参数不会调用默认构造函数

Swift为什么不强迫我指定的初始化程序调用super?

与普通的 const 对象不同,为什么我们可以在没有任何初始化程序的情况下创建 const std::vector

React默认情况下会调用useState而不带括号

类的Ctor初始化程序不会调用适当的构造函数

为什么超类为空的构造函数是必需的,而在可怕的菱形情况下却没有调用?

为什么仅在列表初始化的情况下才会出现缩小转换警告?

为什么可以在不表示'self'关键字的情况下初始化python class属性?

在什么情况下会调用Parse HTML事件?

默认情况下,C 中未初始化的局部变量是静态的吗?

后续“在 PyTorch 中默认情况下如何初始化层权重和偏差?”

默认情况下,如何在Java中声明/初始化数组?

Swift用参数初始化类然后在没有参数的情况下初始化它