与Objective-C中的子类不同,Swift子类不会继承 默认情况下,他们的超类初始值设定项。
然后它说:
编写与超类匹配的子类初始值设定项时 指定的初始化程序,您实际上提供了覆盖 指定的初始化程序。因此,您必须编写覆盖 子类的初始化定义之前的修饰符。
来自Java背景,其中构造函数不是继承的,我不明白这是如何工作的。为什么我们要覆盖默认情况下不会继承的初始值设定项?在我看来,像构造函数一样,初始化程序将隐式命名为类本身,并且可以在子类中重载(例如,Java中的类Dog
只有名称为Dog
的构造函数。但我不理解覆盖父初始化程序的想法。
答案 0 :(得分:1)
子类可能不会“默认”继承它们的超类初始值设定项,但它们可以被继承(例如,如果你不提供任何指定的初始值设定项,你将自动继承超类的所有指定初始值设定项...参见{{ 3}})。
考虑名为Dog
的{{1}}子类:如果您未在Chihuahua
中实现任何指定的初始值设定项,则会自动继承Chihuahua
初始值设定项,而不会在部分。但是,如果您确实需要因某些原因覆盖它,请执行此操作,只需从Dog
指定的初始化程序中调用Dog
指定的初始值设定项即可。如果您的Chihuahua
初始值设定项与Chihuahua
指定的初始值设定项具有相同的签名,则必须明确提供Dog
关键字。