覆盖超类的指定初始值设定项

9 overriding initialization class objective-c designated-initializer

我正在读一本有指导原则的书:

"如果一个类声明了一个与其超类不同的指定初始值设定项,则必须重写超类的指定初始值设定项以调用新的指定初始值设定项"

据我所知,这个指导就是说,如果我将我的类子类化为它的超类,并且我的子类有一个与des不同的指定初始化器.它的超类的初始化程序,然后在我的子类中,我必须覆盖我的超类的指定初始化程序,并在其内部调用我的子类的指定初始化程序.

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

new*_*cct 13

@justin基本上就是重点.

Objective-C中的方法是继承的.这意味着如果超类具有初始化方法(初始化器只是方法),并且您的子类不覆盖它,那么您的子类将继承该超类的初始化方法.这意味着人们总是可以在子类的对象上调用超类的初始化器(继承和子类型多态的基本结果).但这可能不是你所期望的.超类的初始化程序可能无法完成您的类所需的所有初始化.

这就是为什么你应该覆盖超类的初始化器.如果您不希望人们在您的类的对象上使用该初始化程序,则应该在该初始化程序中引发异常.否则,您应该覆盖它以对您的类进行任何适当的初始化.