这是我的代码:
public class A{ public init(n : Int) { print("A") } } public class B : A { } public class C : B { } let x = C(n: 123)
这无法编译并大喊这样的错误:
repl.swift:9:9: error: 'C' cannot be constructed because it has no accessible initializers
可以编译以下代码.
public class A { public init(n : Int) { print("A") } } public class B : A { } public class C : B { } let x = C(n: 123)
是否应该继承要求类型指定的泛型类型的初始值设定项?
========以下附加内容=======
"超类初始化器在某些情况下是继承的,但只有在安全且适当的情况下才会继承.有关更多信息,请参阅下面的"自动初始化程序继承"."
--- Apple Inc."Swift编程语言(Swift 2)"iBooks.
还有这个
"但是,如果满足某些条件,则会自动继承超类初始值设定项."
"假设您为在子类中引入的任何新属性提供默认值,则应用以下两个规则:" 规则1 "如果您的子类未定义任何指定的初始值设定项,则它会自动继承其所有超类指定的初始值设定项." 规则2 "如果您的子类提供了所有超类指定初始化程序的实现 - 通过按照规则1继承它们,或者通过提供自定义实现作为其定义的一部分 - 那么它会自动继承所有超类便利初始化程序."
当查看第一个代码时,子类B
没有定义任何指定的初始化器,它应该自动继承它的所有超类指定的初始化器,那些来自A
.But的实际上并没有看起来连接到我.