objective-c - 覆盖父类(super class)的指定初始化程序

标签 objective-c class initialization overriding designated-initializer

我正在读一本有指南的书:

“如果一个类声明了一个不同于其父类的指定构造器,则必须覆盖父类的指定构造器以调用新的指定构造器”

按照我的理解,换句话说,如果我从它的父类(super class)中继承我的类,并且我的子类有一个指定的初始化器,它不同于 des。它的父类(super class)的初始值设定项,然后在我的子类中,我必须覆盖我的父类(super class)的指定初始值设定项,并在其中调用我的子类的指定初始值设定项。

这是真的吗?我们必须一直这样做吗?谢谢。

最佳答案

@justin 基本上说到点子上了。

Objective-C 中的方法是继承的。这意味着如果父类(super class)有一个初始化方法(初始化只是方法),并且您的子类没有覆盖它,那么您的子类将继承该父类(super class)的初始化方法。这意味着人们总是可以在您的子类的对象上调用该父类(super class)的初始值设定项(继承和子类型多态性的基本结果)。但这可能不是你所期望的。父类(super class)的初始化程序可能不会执行您的类所需的所有初始化。

这就是为什么你应该覆盖父类(super class)的初始化器。如果你不希望人们在你的类的一个对象上使用那个初始化器,你应该在那个初始化器中抛出一个异常。否则,您应该覆盖它以对您的类进行任何适当的初始化。

关于objective-c - 覆盖父类(super class)的指定初始化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17669499/

相关文章:

kubernetes - 覆盖子图中的引用文件(在 .Files 中)或从主图中插入 mariadb 初始文件

iphone - 从脚本将文件添加到 xcode 项目

iphone - 如何检查我是否从 json 中得到 null?

iphone - 获取 UIslider 轨道上的事件

objective-c - 需要帮助让 IBDesignable 工作

c# - 使用反射循环类变量

c# - 南希开始接受请求很慢

c++ - 动态分配类数组的行为

python - 返回子类实例的父方法

C++类成员初始化(poco)